@vertigis/arcgis-extensions 34.0.2 → 34.2.1

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 (96) hide show
  1. package/AppConfig.schema.json +16 -0
  2. package/data/Feature.js +1 -1
  3. package/data/_TableExtension.js +1 -1
  4. package/data/convert.js +1 -1
  5. package/docs/html/assets/js/search.js +1 -1
  6. package/docs/html/classes/data__tableextension.tableextension.html +8 -8
  7. package/docs/html/classes/data__tableextension.tablefeaturesettings.html +10 -10
  8. package/docs/html/classes/data__tableextension.tableschema.html +13 -13
  9. package/docs/html/classes/data_arcgisservicetableextension.arcgisservicetableextension.html +3 -3
  10. package/docs/html/classes/layer_preset_layerpreset.layerpreset.html +9 -9
  11. package/docs/html/classes/layer_preset_layerpresetsettings.layerpresetsetting.html +91 -9
  12. package/docs/html/classes/mapping__layerextension.arraywrappedcollection.html +2 -2
  13. package/docs/html/classes/mapping__layerextension.layerextension.html +95 -41
  14. package/docs/html/classes/mapping__layerextension.layerextensionschema.html +6 -6
  15. package/docs/html/classes/mapping__sublayerextension.sublayerextension.html +60 -32
  16. package/docs/html/classes/mapping__sublayerextension.sublayerschema.html +4 -4
  17. package/docs/html/classes/mapping__sublayerextension.subsublayerextensioncollection.html +6 -6
  18. package/docs/html/classes/mapping_arcgissublayerextension.arcgissublayerextension.html +47 -19
  19. package/docs/html/classes/mapping_arcgissublayerextension.arcgissublayerschema.html +2 -2
  20. package/docs/html/classes/mapping_buildingcomponentsublayerextension.buildingcomponentsublayerextension.html +48 -20
  21. package/docs/html/classes/mapping_buildingcomponentsublayerextension.buildingcomponentsublayerschema.html +2 -2
  22. package/docs/html/classes/mapping_buildinggroupsublayerextension.buildinggroupsublayerextension.html +50 -22
  23. package/docs/html/classes/mapping_buildinggroupsublayerextension.buildinggroupsublayerschema.html +4 -4
  24. package/docs/html/classes/mapping_buildingscenelayerextension.buildingscenelayerextension.html +86 -32
  25. package/docs/html/classes/mapping_buildingscenelayerextension.buildingscenelayerreadonlyschema.html +4 -4
  26. package/docs/html/classes/mapping_buildingsublayerextension.buildingsublayerextension.html +56 -28
  27. package/docs/html/classes/mapping_buildingsublayerextension.buildingsublayerschema.html +3 -3
  28. package/docs/html/classes/mapping_csvlayerextension.csvlayerextension.html +93 -39
  29. package/docs/html/classes/mapping_elevationlayerextension.elevationlayerextension.html +99 -41
  30. package/docs/html/classes/mapping_featurecollectionlayerextension.featurecollectionlayerextension.html +87 -33
  31. package/docs/html/classes/mapping_featurelayerextension.featurelayerextension.html +89 -35
  32. package/docs/html/classes/mapping_featurelayerextensionbase.featurelayerextensionbase.html +91 -37
  33. package/docs/html/classes/mapping_featurelayerextensionbase.featurelayerschema.html +4 -4
  34. package/docs/html/classes/mapping_georsslayerextension.georsslayerextension.html +91 -37
  35. package/docs/html/classes/mapping_graphicslayerextension.graphicslayerextension.html +86 -32
  36. package/docs/html/classes/mapping_grouplayerextension.grouplayerextension.html +99 -45
  37. package/docs/html/classes/mapping_grouplayerextension.grouplayerextensioncollection.html +6 -6
  38. package/docs/html/classes/mapping_imagerylayerextension.imagerylayerextension.html +91 -37
  39. package/docs/html/classes/mapping_imagerytilelayerextension.imagerytilelayerextension.html +88 -34
  40. package/docs/html/classes/mapping_integratedmeshlayerextension.integratedmeshlayerextension.html +100 -42
  41. package/docs/html/classes/mapping_kmllayerextension.kmllayerextension.html +88 -34
  42. package/docs/html/classes/mapping_kmlsublayerextension.kmlsublayerextension.html +63 -31
  43. package/docs/html/classes/mapping_mapimagelayerextension.mapimagelayerextension.html +89 -35
  44. package/docs/html/classes/mapping_mapimagesublayerextension.mapimagesublayerextension.html +44 -16
  45. package/docs/html/classes/mapping_openstreetmaplayerextension.openstreetmaplayerextension.html +93 -39
  46. package/docs/html/classes/mapping_pointcloudlayerextension.pointcloudlayerextension.html +101 -43
  47. package/docs/html/classes/mapping_scenelayerextension.scenelayerextension.html +91 -37
  48. package/docs/html/classes/mapping_streamlayerextension.streamlayerextension.html +92 -38
  49. package/docs/html/classes/mapping_streamlayerextension.streamlayerschema.html +4 -4
  50. package/docs/html/classes/mapping_support_layerlistsettings.extensionbaselayerlistsettings.html +139 -16
  51. package/docs/html/classes/mapping_support_layerlistsettings.layerlistsettings.html +138 -9
  52. package/docs/html/classes/mapping_support_layerlistsettings.layerlistsettingsproperties.html +3 -3
  53. package/docs/html/classes/mapping_tilelayerextension.tilelayerextension.html +87 -33
  54. package/docs/html/classes/mapping_tilesublayerextension.tilesublayerextension.html +51 -19
  55. package/docs/html/classes/mapping_vectortilelayerextension.vectortilelayerextension.html +90 -36
  56. package/docs/html/classes/mapping_webtilelayerextension.webtilelayerextension.html +93 -39
  57. package/docs/html/classes/mapping_wmslayerextension.wmslayerextension.html +88 -34
  58. package/docs/html/classes/mapping_wmssublayerextension.wmssublayerextension.html +62 -30
  59. package/docs/html/classes/mapping_wmtslayerextension.wmtslayerextension.html +88 -34
  60. package/docs/html/classes/mapping_wmtssublayerextension.wmtssublayerextension.html +62 -30
  61. package/docs/html/interfaces/layer_preset_layerpreset.layerpresetproperties.html +5 -5
  62. package/docs/html/interfaces/layer_preset_layerpresetsettings.layerpresetsettingproperties.html +77 -1
  63. package/docs/html/modules/data_convert.html +1 -1
  64. package/docs/html/modules/data_feature.html +2 -2
  65. package/docs/html/modules/mapping__layerextension.html +1 -1
  66. package/docs/html/modules/mapping_support_layerlistsettings.html +1 -1
  67. package/docs/html/modules/version.html +1 -1
  68. package/layer-preset/LayerPreset.js +1 -1
  69. package/layer-preset/LayerPresetSettings.d.ts +41 -3
  70. package/layer-preset/LayerPresetSettings.js +1 -1
  71. package/mapping/ElevationLayerExtension.d.ts +4 -0
  72. package/mapping/ElevationLayerExtension.js +1 -1
  73. package/mapping/GroupLayerExtension.d.ts +4 -0
  74. package/mapping/GroupLayerExtension.js +1 -1
  75. package/mapping/IntegratedMeshLayerExtension.d.ts +4 -0
  76. package/mapping/IntegratedMeshLayerExtension.js +1 -1
  77. package/mapping/KMLSublayerExtension.d.ts +4 -0
  78. package/mapping/KMLSublayerExtension.js +1 -1
  79. package/mapping/PointCloudLayerExtension.d.ts +4 -0
  80. package/mapping/PointCloudLayerExtension.js +1 -1
  81. package/mapping/TileSublayerExtension.d.ts +4 -0
  82. package/mapping/TileSublayerExtension.js +1 -1
  83. package/mapping/WMSSublayerExtension.d.ts +4 -0
  84. package/mapping/WMSSublayerExtension.js +1 -1
  85. package/mapping/WMTSSublayerExtension.d.ts +4 -0
  86. package/mapping/WMTSSublayerExtension.js +1 -1
  87. package/mapping/_LayerExtension.d.ts +10 -0
  88. package/mapping/_LayerExtension.js +1 -1
  89. package/mapping/_SublayerExtension.d.ts +6 -0
  90. package/mapping/_SublayerExtension.js +1 -1
  91. package/mapping/support/LayerListSettings.d.ts +18 -5
  92. package/mapping/support/LayerListSettings.js +1 -1
  93. package/package.json +1 -1
  94. package/utilities/_layers.js +1 -1
  95. package/version.d.ts +1 -1
  96. package/version.js +1 -1
@@ -21,6 +21,22 @@ export interface LayerPresetSettingProperties {
21
21
  * See {@link LayerPresetSetting.expanded}.
22
22
  */
23
23
  expanded?: boolean;
24
+ /**
25
+ * See {@link LayerPresetSetting.minScale}.
26
+ */
27
+ minScale?: number;
28
+ /**
29
+ * See {@link LayerPresetSetting.maxScale}.
30
+ */
31
+ maxScale?: number;
32
+ /**
33
+ * See {@link LayerPresetSetting.childrenIncludedInLayerList}.
34
+ */
35
+ childrenIncludedInLayerList?: boolean;
36
+ /**
37
+ * See {@link LayerPresetSetting.includedInLayerList}.
38
+ */
39
+ includedInLayerList?: boolean;
24
40
  /**
25
41
  * See {@link LayerPresetSetting.sublayers}.
26
42
  */
@@ -35,13 +51,35 @@ export declare class LayerPresetSetting extends SerializableBase<LayerPresetSett
35
51
  */
36
52
  visible: boolean;
37
53
  /**
38
- * Opacity of the layer.
54
+ * If set, overrides the opacity of the layer or sublayer when the preset
55
+ * is applied. No effect if the type of layer or sublayer does not allow
56
+ * changing opacity.
39
57
  */
40
- opacity: number;
58
+ opacity?: number;
41
59
  /**
42
60
  * Whether the layer is expanded in the layer list.
43
61
  */
44
- expanded: boolean;
62
+ expanded?: boolean;
63
+ /**
64
+ * If set, overrides the minimum scale of the layer or sublayer when the
65
+ * preset is applied. No effect if the type of layer or sublayer does not
66
+ * allow changing scale.
67
+ */
68
+ minScale?: number;
69
+ /**
70
+ * If set, overrides the maximum scale of the layer or sublayer when the
71
+ * preset is applied. No effect if the type of layer or sublayer does not
72
+ * allow changing scale.
73
+ */
74
+ maxScale?: number;
75
+ /**
76
+ * Controls whether sublayers are included or hidden in the layer list.
77
+ */
78
+ childrenIncludedInLayerList?: boolean;
79
+ /**
80
+ * Controls whether this layer should be included in the layer list.
81
+ */
82
+ includedInLayerList?: boolean;
45
83
  /**
46
84
  * LayerPresetSetting that can be applied to the sublayers of the layer this
47
85
  * LayerPreset is applied to.
@@ -1 +1 @@
1
- var LayerPresetSetting_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable,SerializableBase}from"../support/Serializable.js";import{ObservableMap}from"../utilities/ObservableMap.js";import{map}from"../utilities/iterable.js";const ERR_SUBLAYER_UNDEFINED="Cannot define a LayerPresetSetting that does not have sublayer reference.";let LayerPresetSetting=LayerPresetSetting_1=class extends SerializableBase{constructor(e){super(e),this.sublayers=new ObservableMap}_getSerializableProperties(){return{visible:"initial",opacity:"initial",expanded:"initial",sublayers:{serializeModes:["initial"],serialize:()=>Array.from(map(this.sublayers.entries(),(e=>{let r={sublayer:e[0]};return r={...r,...e[1].toJSON()},r}))),deserialize:e=>{this.sublayers.clear();for(const r of e){if(void 0===r.sublayer||null===r.sublayer)throw new InvalidOperationError(ERR_SUBLAYER_UNDEFINED);this.sublayers.set(r.sublayer,new LayerPresetSetting_1(r))}}}}}};LayerPresetSetting=LayerPresetSetting_1=__decorate([serializable],LayerPresetSetting);export{LayerPresetSetting};
1
+ var LayerPresetSetting_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable,SerializableBase}from"../support/Serializable.js";import{ObservableMap}from"../utilities/ObservableMap.js";import{map}from"../utilities/iterable.js";const ERR_SUBLAYER_UNDEFINED="Cannot define a LayerPresetSetting that does not have sublayer reference.";let LayerPresetSetting=LayerPresetSetting_1=class extends SerializableBase{constructor(e){super(e),this.sublayers=new ObservableMap}_getSerializableProperties(){const e=e=>null==e;return{visible:"initial",opacity:{serializeModes:["initial"],isDefault:e},expanded:{serializeModes:["initial"],isDefault:e},minScale:{serializeModes:["initial"],isDefault:e},maxScale:{serializeModes:["initial"],isDefault:e},childrenIncludedInLayerList:{serializeModes:["initial"],isDefault:e},includedInLayerList:{serializeModes:["initial"],isDefault:e},sublayers:{serializeModes:["initial"],serialize:e=>Array.from(map(this.sublayers.entries(),(i=>{let r={sublayer:i[0]};return r={...r,...i[1].toJSON(e)},r}))),deserialize:(e=[])=>{this.sublayers.clear();for(const i of e){if(void 0===i.sublayer||null===i.sublayer)throw new InvalidOperationError(ERR_SUBLAYER_UNDEFINED);this.sublayers.set(i.sublayer,new LayerPresetSetting_1(i))}}}}}};LayerPresetSetting=LayerPresetSetting_1=__decorate([serializable],LayerPresetSetting);export{LayerPresetSetting};
@@ -26,6 +26,10 @@ export declare class ElevationLayerExtension extends LayerExtension<ElevationLay
26
26
  * @inheritdoc
27
27
  */
28
28
  protected _getSerializableProperties(): PropertyDefs<ElevationLayerExtensionProperties>;
29
+ /**
30
+ * @inheritdoc
31
+ */
32
+ get canChangeScale(): boolean;
29
33
  /**
30
34
  * @inheritdoc
31
35
  */
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{ElevationLayer as PortalElevationLayer}from"../portal/ElevationLayer.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{serializable}from"../support/Serializable.js";import{isElevationLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";let ElevationLayerExtension=class extends LayerExtension{get layer(){return super.layer}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISTiledElevationServiceLayer"}}}}_isSupportedLayer(e){return isElevationLayer(e)}_createSchema(){return new ElevationLayerSchema(this)}_applyLayerProperties(e,r){return checkArg("layerJson",e).isNotMissing(),checkArg("layerJson.layerType",e.layerType).satisfies((e=>!e||"ArcGISTiledElevationServiceLayer"===e),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",r).isNotMissing().satisfies(isElevationLayer,ERR_LAYER_TYPE_MISMATCH),super._applyLayerProperties(e,r)}async _applyPortalItemProperties(e){if("Image Service"!==e.type)throw new Error(`Cannot create Elevation Layer from Portal item that has type: ${e.type}`);if("Elevation"!==(await LayerExtension._getLayerData(e.url,new DefaultArcGISRequestHelper)).cacheType)throw new Error("Cannot create Elevation Layer from Portal item that does not reference an Elevation layer");const r={layerType:"ArcGISTiledElevationServiceLayer",url:e.url};return PortalElevationLayer.applyToEsriApiLayer(r,this.layer)}};ElevationLayerExtension=__decorate([serializable],ElevationLayerExtension);export{ElevationLayerExtension};let ElevationLayerSchema=class extends LayerExtensionSchema{_getPropertyBindings(){return{spatialReference:{property:"spatialReference",readonly:!0}}}};ElevationLayerSchema=__decorate([serializable],ElevationLayerSchema);
1
+ import{__decorate}from"tslib";import{ElevationLayer as PortalElevationLayer}from"../portal/ElevationLayer.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{serializable}from"../support/Serializable.js";import{isElevationLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";let ElevationLayerExtension=class extends LayerExtension{get layer(){return super.layer}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"ArcGISTiledElevationServiceLayer"}}}}get canChangeScale(){return!1}_isSupportedLayer(e){return isElevationLayer(e)}_createSchema(){return new ElevationLayerSchema(this)}_applyLayerProperties(e,r){return checkArg("layerJson",e).isNotMissing(),checkArg("layerJson.layerType",e.layerType).satisfies((e=>!e||"ArcGISTiledElevationServiceLayer"===e),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",r).isNotMissing().satisfies(isElevationLayer,ERR_LAYER_TYPE_MISMATCH),super._applyLayerProperties(e,r)}async _applyPortalItemProperties(e){if("Image Service"!==e.type)throw new Error(`Cannot create Elevation Layer from Portal item that has type: ${e.type}`);if("Elevation"!==(await LayerExtension._getLayerData(e.url,new DefaultArcGISRequestHelper)).cacheType)throw new Error("Cannot create Elevation Layer from Portal item that does not reference an Elevation layer");const r={layerType:"ArcGISTiledElevationServiceLayer",url:e.url};return PortalElevationLayer.applyToEsriApiLayer(r,this.layer)}};ElevationLayerExtension=__decorate([serializable],ElevationLayerExtension);export{ElevationLayerExtension};let ElevationLayerSchema=class extends LayerExtensionSchema{_getPropertyBindings(){return{spatialReference:{property:"spatialReference",readonly:!0}}}};ElevationLayerSchema=__decorate([serializable],ElevationLayerSchema);
@@ -40,6 +40,10 @@ export declare class GroupLayerExtension<TProps extends LayerExtensionProperties
40
40
  * The layer extensions associated with each layer of the group layer.
41
41
  */
42
42
  get layerExtensions(): TColl;
43
+ /**
44
+ * Determines whether this type of layer is capable of having sublayers.
45
+ */
46
+ get supportsSublayers(): boolean;
43
47
  /**
44
48
  * @inheritdoc
45
49
  */
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{serializable}from"../support/Serializable.js";import{isGroupLayer,layersAreEquivalent}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection}from"../utilities/collection.js";import{find}from"../utilities/iterable.js";import{getLogger}from"../utilities/log.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("GroupLayerExtension");let GroupLayerExtension=class extends LayerExtension{constructor(e){super(e),this._onLayerAddedPostInitialize=async e=>{var i,t;try{await e.initialize()}catch(s){log.error(`Error occurred while initializing layer extension for layer '${null!==(t=null!==(i=e.title)&&void 0!==i?i:e.layer.id)&&void 0!==t?t:e.id}'. ${s}`)}},this._layerExtensions=this._createLayerExtensionCollection(),watchEach(this.layerExtensions,"effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),watchEach(this.layerExtensions,"effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.watch("layer",(()=>{this.layer&&void 0!==this._visibilityModeField&&(this.layer.visibilityMode=this._visibilityModeField)}))}get layer(){return super.layer}get layerExtensions(){return this._layerExtensions}get visibilityMode(){return this.layer?this.layer.visibilityMode:this._visibilityModeField||"independent"}set visibilityMode(e){this._visibilityModeField=e,this.layer&&(this.layer.visibilityMode=e)}get effectiveFullExtent(){return this.layerExtensions.initializedItems.length?this.layerExtensions.initializedItems.toArray().map((e=>e.layer.fullExtent)).reduce(((e,i)=>e?e.clone().union(i):i)):void 0}get effectiveMinScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMinScale||1/0)).toArray(),i=Math.max(...e);return isFinite(i)?i:0}get effectiveMaxScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMaxScale)).toArray(),i=Math.min(...e);return isFinite(i)?i:0}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.layerExtensions.toArray().map((e=>e._getProjectWebmapJSON()))),e}_setMapExtension(e){super._setMapExtension(e),this._layerExtensions.onMapExtensionChanged()}async _switchLayer(e){const i=new Map;this.layer&&this.layer.layers.forEach((e=>{i.set(e,this.layerExtensions.forLayer(e))})),await super._switchLayer(e);const t=[];if(this.layer)for(const e of this.layer.layers.toArray()){const s=find(i.entries(),(([i])=>layersAreEquivalent(i,e)));s&&t.push((async()=>{const i=s[1];await i._switchLayer(e),this.layerExtensions._register(i)})())}this.isInitialized&&t.push(this._initializeChildren()),await Promise.all(t)}_getSerializableProperties(){const e=super._getSerializableProperties(),i={...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"GroupLayer"}},layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{_assignLayerExtensions(this.layerExtensions,e)}},visibilityMode:{...this._toPropertyDef(e.visibilityMode),isDefault:()=>void 0===this._visibilityModeField}};return delete i.visibilityMode.default,i}async _onInitialize(){await super._onInitialize(),this.layer.layers||(this.layer.layers=new Collection),this._layerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.layers",(async e=>{var i;const t=(null!==(i=e.added)&&void 0!==i?i:[]).map((e=>this.layerExtensions.forLayer(e)));await Promise.all(t.map(this._onLayerAddedPostInitialize))})))}async _onDestroy(){await Promise.all(this.layerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.layerExtensions}_isSupportedLayer(e){return isGroupLayer(e)}_createLayerExtensionCollection(){return new GroupLayerExtensionCollection(this)}_createLayerListSettings(e){return new GroupLayerExtensionLayerListSettings(e,this)}};GroupLayerExtension=__decorate([serializable],GroupLayerExtension);export{GroupLayerExtension};let GroupLayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!0}get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return!0}};GroupLayerExtensionLayerListSettings=__decorate([serializable],GroupLayerExtensionLayerListSettings);export class GroupLayerExtensionCollection extends LayerExtensionCollectionBase{constructor(e){super(e,"layer.layers")}get _mapExtension(){return this._parent.mapExtension}add(e,i){checkArg("layerX",e).isNotMissing(),e.parentLayerExtension&&e.parentLayerExtension!==this._parent&&e.parentLayerExtension.layerExtensions.remove(e),e._setParentLayerExtension(this._parent),super.add(e,i)}_onAdded(e){super._onAdded(e),e._setParentLayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentLayerExtension(void 0)}}
1
+ import{__decorate}from"tslib";import{serializable}from"../support/Serializable.js";import{isGroupLayer,layersAreEquivalent}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection}from"../utilities/collection.js";import{find}from"../utilities/iterable.js";import{getLogger}from"../utilities/log.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{ExtensionBaseLayerListSettings}from"./support/LayerListSettings.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("GroupLayerExtension");let GroupLayerExtension=class extends LayerExtension{constructor(e){super(e),this._onLayerAddedPostInitialize=async e=>{var i,t;try{await e.initialize()}catch(s){log.error(`Error occurred while initializing layer extension for layer '${null!==(t=null!==(i=e.title)&&void 0!==i?i:e.layer.id)&&void 0!==t?t:e.id}'. ${s}`)}},this._layerExtensions=this._createLayerExtensionCollection(),watchEach(this.layerExtensions,"effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),watchEach(this.layerExtensions,"effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.watch("layer",(()=>{this.layer&&void 0!==this._visibilityModeField&&(this.layer.visibilityMode=this._visibilityModeField)}))}get layer(){return super.layer}get layerExtensions(){return this._layerExtensions}get supportsSublayers(){return!0}get visibilityMode(){return this.layer?this.layer.visibilityMode:this._visibilityModeField||"independent"}set visibilityMode(e){this._visibilityModeField=e,this.layer&&(this.layer.visibilityMode=e)}get effectiveFullExtent(){return this.layerExtensions.initializedItems.length?this.layerExtensions.initializedItems.toArray().map((e=>e.layer.fullExtent)).reduce(((e,i)=>e?e.clone().union(i):i)):void 0}get effectiveMinScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMinScale||1/0)).toArray(),i=Math.max(...e);return isFinite(i)?i:0}get effectiveMaxScale(){const e=this.layerExtensions.initializedItems.map((e=>e.effectiveMaxScale)).toArray(),i=Math.min(...e);return isFinite(i)?i:0}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return!e||this.dynamicallyAddedLayer||(e.layers=this.layerExtensions.toArray().map((e=>e._getProjectWebmapJSON()))),e}_setMapExtension(e){super._setMapExtension(e),this._layerExtensions.onMapExtensionChanged()}async _switchLayer(e){const i=new Map;this.layer&&this.layer.layers.forEach((e=>{i.set(e,this.layerExtensions.forLayer(e))})),await super._switchLayer(e);const t=[];if(this.layer)for(const e of this.layer.layers.toArray()){const s=find(i.entries(),(([i])=>layersAreEquivalent(i,e)));s&&t.push((async()=>{const i=s[1];await i._switchLayer(e),this.layerExtensions._register(i)})())}this.isInitialized&&t.push(this._initializeChildren()),await Promise.all(t)}_getSerializableProperties(){const e=super._getSerializableProperties(),i={...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"GroupLayer"}},layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{_assignLayerExtensions(this.layerExtensions,e)}},visibilityMode:{...this._toPropertyDef(e.visibilityMode),isDefault:()=>void 0===this._visibilityModeField}};return delete i.visibilityMode.default,i}async _onInitialize(){await super._onInitialize(),this.layer.layers||(this.layer.layers=new Collection),this._layerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.layers",(async e=>{var i;const t=(null!==(i=e.added)&&void 0!==i?i:[]).map((e=>this.layerExtensions.forLayer(e)));await Promise.all(t.map(this._onLayerAddedPostInitialize))})))}async _onDestroy(){await Promise.all(this.layerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.layerExtensions}_isSupportedLayer(e){return isGroupLayer(e)}_createLayerExtensionCollection(){return new GroupLayerExtensionCollection(this)}_createLayerListSettings(e){return new GroupLayerExtensionLayerListSettings(e,this)}};GroupLayerExtension=__decorate([serializable],GroupLayerExtension);export{GroupLayerExtension};let GroupLayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _layerSupportsHideChildren(){return!0}get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return!0}};GroupLayerExtensionLayerListSettings=__decorate([serializable],GroupLayerExtensionLayerListSettings);export class GroupLayerExtensionCollection extends LayerExtensionCollectionBase{constructor(e){super(e,"layer.layers")}get _mapExtension(){return this._parent.mapExtension}add(e,i){checkArg("layerX",e).isNotMissing(),e.parentLayerExtension&&e.parentLayerExtension!==this._parent&&e.parentLayerExtension.layerExtensions.remove(e),e._setParentLayerExtension(this._parent),super.add(e,i)}_onAdded(e){super._onAdded(e),e._setParentLayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentLayerExtension(void 0)}}
@@ -22,6 +22,10 @@ export declare class IntegratedMeshLayerExtension extends LayerExtension<Integra
22
22
  * The Esri {@link IntegratedMeshLayer} object being extended.
23
23
  */
24
24
  get layer(): IntegratedMeshLayer;
25
+ /**
26
+ * @inheritdoc
27
+ */
28
+ get canChangeOpacity(): boolean;
25
29
  /**
26
30
  * @inheritdoc
27
31
  */
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{IntegratedMeshLayer as PortalIntegratedMeshLayer}from"../portal/IntegratedMeshLayer.js";import{serializable}from"../support/Serializable.js";import{isIntegratedMeshLayer}from"../utilities/_layers.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";let IntegratedMeshLayerExtension=class extends LayerExtension{get layer(){return super.layer}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"IntegratedMeshLayer"}}}}_isSupportedLayer(e){return isIntegratedMeshLayer(e)}_createSchema(){return new IntegratedMeshLayerSchema(this)}async _applyPortalItemProperties(e){if("Scene Service"!==e.type)throw new Error(`Cannot create Integrated Mesh Layer from Portal item that has type: ${e.type}`);if(!e.typeKeywords.includes("IntegratedMesh"))throw new Error("Cannot create Integrated Mesh Layer from Portal item that does not reference an Integrated Mesh layer");const r={layerType:"IntegratedMeshLayer",url:e.url};return PortalIntegratedMeshLayer.applyToEsriApiLayer(r,this.layer)}};IntegratedMeshLayerExtension=__decorate([serializable],IntegratedMeshLayerExtension);export{IntegratedMeshLayerExtension};let IntegratedMeshLayerSchema=class extends LayerExtensionSchema{_getPropertyBindings(){return{spatialReference:{property:"spatialReference",readonly:!0}}}};IntegratedMeshLayerSchema=__decorate([serializable],IntegratedMeshLayerSchema);
1
+ import{__decorate}from"tslib";import{IntegratedMeshLayer as PortalIntegratedMeshLayer}from"../portal/IntegratedMeshLayer.js";import{serializable}from"../support/Serializable.js";import{isIntegratedMeshLayer}from"../utilities/_layers.js";import{LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";let IntegratedMeshLayerExtension=class extends LayerExtension{get layer(){return super.layer}get canChangeOpacity(){return!1}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"IntegratedMeshLayer"}}}}_isSupportedLayer(e){return isIntegratedMeshLayer(e)}_createSchema(){return new IntegratedMeshLayerSchema(this)}async _applyPortalItemProperties(e){if("Scene Service"!==e.type)throw new Error(`Cannot create Integrated Mesh Layer from Portal item that has type: ${e.type}`);if(!e.typeKeywords.includes("IntegratedMesh"))throw new Error("Cannot create Integrated Mesh Layer from Portal item that does not reference an Integrated Mesh layer");const r={layerType:"IntegratedMeshLayer",url:e.url};return PortalIntegratedMeshLayer.applyToEsriApiLayer(r,this.layer)}};IntegratedMeshLayerExtension=__decorate([serializable],IntegratedMeshLayerExtension);export{IntegratedMeshLayerExtension};let IntegratedMeshLayerSchema=class extends LayerExtensionSchema{_getPropertyBindings(){return{spatialReference:{property:"spatialReference",readonly:!0}}}};IntegratedMeshLayerSchema=__decorate([serializable],IntegratedMeshLayerSchema);
@@ -67,6 +67,10 @@ export declare class KMLSublayerExtension extends SublayerExtension<KMLSublayerE
67
67
  * @inheritdoc
68
68
  */
69
69
  get hasFeatures(): boolean;
70
+ /**
71
+ * @inheritdoc
72
+ */
73
+ get canChangeScale(): boolean;
70
74
  constructor(properties?: KMLSublayerExtensionProperties);
71
75
  /**
72
76
  * @inheritdoc
@@ -1 +1 @@
1
- var KMLSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable}from"../support/Serializable.js";import{isKMLSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_CREATE_SUBLAYER_NOT_SUPPORTED="KML sublayers cannot be created or configured from JSON. They must be created with an ESRI KMLSublayer object.",ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for KMLLayerExtension is readonly";let KMLSublayerExtension=KMLSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get layerExtension(){return super.layerExtension}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get hasFeatures(){return!1}constructor(e){super(e);const r=null==e?void 0:e.sublayer;if(!this.sublayer&&!(null==r?void 0:r.$ref))throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}_isSupportedSublayer(e){return isKMLSublayer(e)}_createSublayerExtension(e){return new KMLSublayerExtension_1(e)}_createSublayer(e){throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}async _applySublayerProperties(e,r){}_createSublayerExtensionCollection(){return new KMLSublayerExtensionCollectionImpl(this)}_serializeSublayer(e){return this._createSublayerRef()}};KMLSublayerExtension=KMLSublayerExtension_1=__decorate([serializable],KMLSublayerExtension);export{KMLSublayerExtension};class KMLSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{get _layerExtension(){return super._layerExtension}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...n){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createClone(){return new KMLSublayerExtensionCollectionImpl(this._parent)}_createSublayerExtension(e){return this._layerExtension._createSublayerExtension(e)}}
1
+ var KMLSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable}from"../support/Serializable.js";import{isKMLSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_CREATE_SUBLAYER_NOT_SUPPORTED="KML sublayers cannot be created or configured from JSON. They must be created with an ESRI KMLSublayer object.",ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for KMLLayerExtension is readonly";let KMLSublayerExtension=KMLSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get layerExtension(){return super.layerExtension}get sublayerExtensions(){return super.sublayerExtensions}get supportsSublayers(){return!0}get hasFeatures(){return!1}get canChangeScale(){return!1}constructor(e){super(e);const r=null==e?void 0:e.sublayer;if(!this.sublayer&&!(null==r?void 0:r.$ref))throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}_isSupportedSublayer(e){return isKMLSublayer(e)}_createSublayerExtension(e){return new KMLSublayerExtension_1(e)}_createSublayer(e){throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}async _applySublayerProperties(e,r){}_createSublayerExtensionCollection(){return new KMLSublayerExtensionCollectionImpl(this)}_serializeSublayer(e){return this._createSublayerRef()}};KMLSublayerExtension=KMLSublayerExtension_1=__decorate([serializable],KMLSublayerExtension);export{KMLSublayerExtension};class KMLSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{get _layerExtension(){return super._layerExtension}add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reverse(){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}sort(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}splice(e,r,...n){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}_createClone(){return new KMLSublayerExtensionCollectionImpl(this._parent)}_createSublayerExtension(e){return this._layerExtension._createSublayerExtension(e)}}
@@ -38,6 +38,10 @@ export declare class PointCloudLayerExtension extends LayerExtension<PointCloudL
38
38
  */
39
39
  get enableClientSideData(): boolean;
40
40
  set enableClientSideData(isEnabled: boolean);
41
+ /**
42
+ * @inheritdoc
43
+ */
44
+ get canChangeOpacity(): boolean;
41
45
  protected _onInitialize(): Promise<void>;
42
46
  protected _postInitialize(): Promise<void>;
43
47
  /**
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import CodedValueDomain from"@arcgis/core/layers/support/CodedValueDomain";import ExpressionInfo from"@arcgis/core/popup/ExpressionInfo";import FieldInfo from"@arcgis/core/popup/FieldInfo";import{serializable}from"../support/Serializable.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isPointCloudLayer}from"../utilities/_layers.js";import{ArrayWrappedCollection,LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";import{addOutFields}from"./support/layers.js";let PointCloudLayerExtension=class extends LayerExtension{get layer(){return super.layer}get _layerView(){var e;return this.layer&&(null===(e=this.mapExtension)||void 0===e?void 0:e._layerViews.find((e=>e.layer===this.layer)))}get hasFeatures(){return!0}get enableClientSideData(){return this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return e&&delete e.opacity,e}async _onInitialize(){await super._onInitialize(),this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0))}async _postInitialize(){await super._postInitialize(),await this._setDecodedPopupFieldInfos()}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"PointCloudLayer"}},enableClientSideData:{serializeModes:["initial"],default:!0}}}_isSupportedLayer(e){return isPointCloudLayer(e)}_createSchema(){return new PointCloudLayerSchema(this)}_createFeatureSettings(){return new PopupTemplateFeatureSettings(this)}_updateClientSideFields(){this.layer&&this._enableClientSideData&&addOutFields(this.layer,this.featureSettings.outFields)}async _setDecodedPopupFieldInfos(){var e,t;const i=this.schema.fields.find((e=>"CLASS_CODE"===e.name));if(i){const t=await this.layer.queryCachedStatistics("CLASS_CODE"),r=null===(e=null==t?void 0:t.labels)||void 0===e?void 0:e.labels;r&&(i.domain=new CodedValueDomain({codedValues:r.map((e=>({code:e.value,name:e.label})))}))}if(this.featureSettings.popupTemplate.expressionInfos=null!==(t=this.featureSettings.popupTemplate.expressionInfos)&&void 0!==t?t:[],this.schema.fields.some((e=>"RGB"===e.name))){this.featureSettings.popupTemplate.fieldInfos.find((e=>"RGB"===e.fieldName)).visible=!1,this.featureSettings.popupTemplate.fieldInfos.push(new FieldInfo({fieldName:"expression/__gcx-rgb"})),this.featureSettings.popupTemplate.expressionInfos.push(new ExpressionInfo({expression:"var rgb = $feature.RGB; var red = Floor(rgb/65536,0); var green = Floor((rgb-(red*65536))/256,0); var blue = rgb-(red*65536)-(green*256); return 'rgb(' + red + ',' + green + ',' + blue + ')';",name:"__gcx-rgb",returnType:"string",title:"RGB"}))}if(this.schema.fields.some((e=>"RETURNS"===e.name))){this.featureSettings.popupTemplate.fieldInfos.find((e=>"RETURNS"===e.fieldName)).visible=!1,this.featureSettings.popupTemplate.fieldInfos.push(new FieldInfo({fieldName:"expression/__gcx-returns"})),this.featureSettings.popupTemplate.expressionInfos.push(new ExpressionInfo({expression:"var returnnumber = $feature.RETURNS % 16; var numberofreturns = Floor($feature.RETURNS / 16); return returnnumber + ' / ' + numberofreturns;",name:"__gcx-returns",returnType:"string",title:"RETURNS"}))}}};PointCloudLayerExtension=__decorate([serializable],PointCloudLayerExtension);export{PointCloudLayerExtension};let PointCloudLayerSchema=class extends LayerExtensionSchema{constructor(e){super(e),this._fieldCollection=new ReadOnlyCollection(new ArrayWrappedCollection(e,"fields"))}get _fields(){return this._fieldCollection}_getPropertyBindings(){return{spatialReference:{property:"spatialReference",readonly:!0}}}};PointCloudLayerSchema=__decorate([serializable],PointCloudLayerSchema);
1
+ import{__decorate}from"tslib";import CodedValueDomain from"@arcgis/core/layers/support/CodedValueDomain";import ExpressionInfo from"@arcgis/core/popup/ExpressionInfo";import FieldInfo from"@arcgis/core/popup/FieldInfo";import{serializable}from"../support/Serializable.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{isPointCloudLayer}from"../utilities/_layers.js";import{ArrayWrappedCollection,LayerExtension,LayerExtensionSchema}from"./_LayerExtension.js";import{PopupTemplateFeatureSettings}from"./support/PopupTemplateFeatureSettings.js";import{addOutFields}from"./support/layers.js";let PointCloudLayerExtension=class extends LayerExtension{get layer(){return super.layer}get _layerView(){var e;return this.layer&&(null===(e=this.mapExtension)||void 0===e?void 0:e._layerViews.find((e=>e.layer===this.layer)))}get hasFeatures(){return!0}get enableClientSideData(){return this._enableClientSideData}set enableClientSideData(e){this._enableClientSideData=e,this._updateClientSideFields()}get canChangeOpacity(){return!1}_getProjectWebmapJSON(){const e=super._getProjectWebmapJSON();return e&&delete e.opacity,e}async _onInitialize(){await super._onInitialize(),this._updateClientSideFields(),this._watchHandles.push(this.watch("layer",(()=>{this._updateClientSideFields()}),!0))}async _postInitialize(){await super._postInitialize(),await this._setDecodedPopupFieldInfos()}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,layer:{...this._toPropertyDef(e.layer),default:{layerType:"PointCloudLayer"}},enableClientSideData:{serializeModes:["initial"],default:!0}}}_isSupportedLayer(e){return isPointCloudLayer(e)}_createSchema(){return new PointCloudLayerSchema(this)}_createFeatureSettings(){return new PopupTemplateFeatureSettings(this)}_updateClientSideFields(){this.layer&&this._enableClientSideData&&addOutFields(this.layer,this.featureSettings.outFields)}async _setDecodedPopupFieldInfos(){var e,t;const i=this.schema.fields.find((e=>"CLASS_CODE"===e.name));if(i){const t=await this.layer.queryCachedStatistics("CLASS_CODE"),r=null===(e=null==t?void 0:t.labels)||void 0===e?void 0:e.labels;r&&(i.domain=new CodedValueDomain({codedValues:r.map((e=>({code:e.value,name:e.label})))}))}if(this.featureSettings.popupTemplate.expressionInfos=null!==(t=this.featureSettings.popupTemplate.expressionInfos)&&void 0!==t?t:[],this.schema.fields.some((e=>"RGB"===e.name))){this.featureSettings.popupTemplate.fieldInfos.find((e=>"RGB"===e.fieldName)).visible=!1,this.featureSettings.popupTemplate.fieldInfos.push(new FieldInfo({fieldName:"expression/__gcx-rgb"})),this.featureSettings.popupTemplate.expressionInfos.push(new ExpressionInfo({expression:"var rgb = $feature.RGB; var red = Floor(rgb/65536,0); var green = Floor((rgb-(red*65536))/256,0); var blue = rgb-(red*65536)-(green*256); return 'rgb(' + red + ',' + green + ',' + blue + ')';",name:"__gcx-rgb",returnType:"string",title:"RGB"}))}if(this.schema.fields.some((e=>"RETURNS"===e.name))){this.featureSettings.popupTemplate.fieldInfos.find((e=>"RETURNS"===e.fieldName)).visible=!1,this.featureSettings.popupTemplate.fieldInfos.push(new FieldInfo({fieldName:"expression/__gcx-returns"})),this.featureSettings.popupTemplate.expressionInfos.push(new ExpressionInfo({expression:"var returnnumber = $feature.RETURNS % 16; var numberofreturns = Floor($feature.RETURNS / 16); return returnnumber + ' / ' + numberofreturns;",name:"__gcx-returns",returnType:"string",title:"RETURNS"}))}}};PointCloudLayerExtension=__decorate([serializable],PointCloudLayerExtension);export{PointCloudLayerExtension};let PointCloudLayerSchema=class extends LayerExtensionSchema{constructor(e){super(e),this._fieldCollection=new ReadOnlyCollection(new ArrayWrappedCollection(e,"fields"))}get _fields(){return this._fieldCollection}_getPropertyBindings(){return{spatialReference:{property:"spatialReference",readonly:!0}}}};PointCloudLayerSchema=__decorate([serializable],PointCloudLayerSchema);
@@ -41,6 +41,10 @@ export declare class TileSublayerExtension extends ArcGISSublayerExtension<TileS
41
41
  * @inheritdoc
42
42
  */
43
43
  get canChangeOpacity(): boolean;
44
+ /**
45
+ * @inheritdoc
46
+ */
47
+ get canChangeScale(): boolean;
44
48
  /**
45
49
  * @inheritdoc
46
50
  */
@@ -1 +1 @@
1
- var TileSublayerExtension_1;import{__decorate}from"tslib";import{serializable}from"../support/Serializable.js";import{getLogger}from"../utilities/log.js";import{ArcGISSublayerExtension}from"./ArcGISSublayerExtension.js";const log=getLogger("TileSublayerExtension");let TileSublayerExtension=TileSublayerExtension_1=class extends ArcGISSublayerExtension{get layerExtension(){return super.layerExtension}get sublayerExtensions(){return super.sublayerExtensions}get canToggleVisibility(){return!1}get canChangeOpacity(){return!1}_createSublayerExtension(e){return new TileSublayerExtension_1(e)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,visibilityMode:{...this._toPropertyDef(e.visibilityMode),serialize:()=>"inherited",deserialize:e=>{"inherited"!==e&&log.error(`SublayerExtension (id: ${this.id}, title: ${this.title}) visibilityMode cannot be set to ${e}.`)},default:"inherited"}}}};TileSublayerExtension=TileSublayerExtension_1=__decorate([serializable],TileSublayerExtension);export{TileSublayerExtension};
1
+ var TileSublayerExtension_1;import{__decorate}from"tslib";import{serializable}from"../support/Serializable.js";import{getLogger}from"../utilities/log.js";import{ArcGISSublayerExtension}from"./ArcGISSublayerExtension.js";const log=getLogger("TileSublayerExtension");let TileSublayerExtension=TileSublayerExtension_1=class extends ArcGISSublayerExtension{get layerExtension(){return super.layerExtension}get sublayerExtensions(){return super.sublayerExtensions}get canToggleVisibility(){return!1}get canChangeOpacity(){return!1}get canChangeScale(){return!1}_createSublayerExtension(e){return new TileSublayerExtension_1(e)}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,visibilityMode:{...this._toPropertyDef(e.visibilityMode),serialize:()=>"inherited",deserialize:e=>{"inherited"!==e&&log.error(`SublayerExtension (id: ${this.id}, title: ${this.title}) visibilityMode cannot be set to ${e}.`)},default:"inherited"}}}};TileSublayerExtension=TileSublayerExtension_1=__decorate([serializable],TileSublayerExtension);export{TileSublayerExtension};
@@ -70,6 +70,10 @@ export declare class WMSSublayerExtension extends SublayerExtension<WMSSublayerE
70
70
  */
71
71
  get effectiveFullExtent(): Extent;
72
72
  get hasFeatures(): boolean;
73
+ /**
74
+ * @inheritdoc
75
+ */
76
+ get canChangeOpacity(): boolean;
73
77
  /**
74
78
  * @inheritdoc
75
79
  */
@@ -1 +1 @@
1
- var WMSSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WMSSublayer as PortalWMSSublayer}from"../portal/WMSSublayer.js";import{serializable}from"../support/Serializable.js";import{isWMSSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMSLayerExtension is readonly";let WMSSublayerExtension=WMSSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get layerExtension(){return super.layerExtension}get supportsSublayers(){return!0}get effectiveFullExtent(){return this.sublayer?this.sublayer.fullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get hasFeatures(){return!0}_createSublayerExtension(e){return new WMSSublayerExtension_1(e)}_isSupportedSublayer(e){return isWMSSublayer(e)}_createSublayer(e){return PortalWMSSublayer.toEsriApiWMSSublayer({...e})}async _applySublayerProperties(e,r){return PortalWMSSublayer.applyToEsriApiWMSSublayer(e,r)}_serializeSublayer(e){return PortalWMSSublayer.fromEsriApiWMSSublayer(e)}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollectionImpl(this)}};WMSSublayerExtension=WMSSublayerExtension_1=__decorate([serializable],WMSSublayerExtension);export{WMSSublayerExtension};class SubSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}}
1
+ var WMSSublayerExtension_1;import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{WMSSublayer as PortalWMSSublayer}from"../portal/WMSSublayer.js";import{serializable}from"../support/Serializable.js";import{isWMSSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{SublayerExtension,SubSublayerExtensionCollection}from"./_SublayerExtension.js";const ERR_SUBLAYERX_COLLECTION_READONLY="SublayerExtension collection for WMSLayerExtension is readonly";let WMSSublayerExtension=WMSSublayerExtension_1=class extends SublayerExtension{get sublayer(){return super.sublayer}get sublayerExtensions(){return super.sublayerExtensions}get layerExtension(){return super.layerExtension}get supportsSublayers(){return!0}get effectiveFullExtent(){return this.sublayer?this.sublayer.fullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get hasFeatures(){return!0}get canChangeOpacity(){return!1}_createSublayerExtension(e){return new WMSSublayerExtension_1(e)}_isSupportedSublayer(e){return isWMSSublayer(e)}_createSublayer(e){return PortalWMSSublayer.toEsriApiWMSSublayer({...e})}async _applySublayerProperties(e,r){return PortalWMSSublayer.applyToEsriApiWMSSublayer(e,r)}_serializeSublayer(e){return PortalWMSSublayer.fromEsriApiWMSSublayer(e)}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollectionImpl(this)}};WMSSublayerExtension=WMSSublayerExtension_1=__decorate([serializable],WMSSublayerExtension);export{WMSSublayerExtension};class SubSublayerExtensionCollectionImpl extends SubSublayerExtensionCollection{add(e,r){if(checkArg("sublayerX",e).isNotMissing(),e.sublayer&&this._parent.sublayer.sublayers&&!this._parent.sublayer.sublayers.includes(e.sublayer))throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY);super.add(e,r)}removeAt(e){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}reorder(e,r){throw new InvalidOperationError(ERR_SUBLAYERX_COLLECTION_READONLY)}}
@@ -34,6 +34,10 @@ export declare class WMTSSublayerExtension extends SublayerExtension<WMTSSublaye
34
34
  * @inheritdoc
35
35
  */
36
36
  get canChangeOpacity(): boolean;
37
+ /**
38
+ * @inheritdoc
39
+ */
40
+ get canChangeScale(): boolean;
37
41
  /**
38
42
  * @inheritdoc
39
43
  */
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable}from"../support/Serializable.js";import{isWMTSSublayer}from"../utilities/_layers.js";import{getLogger}from"../utilities/log.js";import{SublayerExtension}from"./_SublayerExtension.js";const log=getLogger("WMTSSublayerExtension"),ERR_CREATE_SUBLAYER_NOT_SUPPORTED="WMTS sublayers cannot be created or configured from JSON. They must be created with an ESRI WMTSSublayer object.";let WMTSSublayerExtension=class extends SublayerExtension{get sublayer(){return super.sublayer}get layerExtension(){return super.layerExtension}get canToggleVisibility(){return!1}get canChangeOpacity(){return!1}get effectiveFullExtent(){return this.sublayer?this.sublayer.fullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}constructor(e){var r;if(super(e),!this.sublayer&&!(null===(r=this._deferredSublayerProperties)||void 0===r?void 0:r.$ref))throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}_isSupportedSublayer(e){return isWMTSSublayer(e)}_createSublayer(e){throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}async _applySublayerProperties(e,r){}_serializeSublayer(e){return this._createSublayerRef()}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,visibilityMode:{...this._toPropertyDef(e.visibilityMode),serialize:()=>"inherited",deserialize:e=>{"inherited"!==e&&log.error(`SublayerExtension (id: ${this.id}, title: ${this.title}) visibilityMode cannot be set to ${e}.`)},default:"inherited"}}}};WMTSSublayerExtension=__decorate([serializable],WMTSSublayerExtension);export{WMTSSublayerExtension};
1
+ import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{serializable}from"../support/Serializable.js";import{isWMTSSublayer}from"../utilities/_layers.js";import{getLogger}from"../utilities/log.js";import{SublayerExtension}from"./_SublayerExtension.js";const log=getLogger("WMTSSublayerExtension"),ERR_CREATE_SUBLAYER_NOT_SUPPORTED="WMTS sublayers cannot be created or configured from JSON. They must be created with an ESRI WMTSSublayer object.";let WMTSSublayerExtension=class extends SublayerExtension{get sublayer(){return super.sublayer}get layerExtension(){return super.layerExtension}get canToggleVisibility(){return!1}get canChangeOpacity(){return!1}get canChangeScale(){return!1}get effectiveFullExtent(){return this.sublayer?this.sublayer.fullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}constructor(e){var r;if(super(e),!this.sublayer&&!(null===(r=this._deferredSublayerProperties)||void 0===r?void 0:r.$ref))throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}_isSupportedSublayer(e){return isWMTSSublayer(e)}_createSublayer(e){throw new InvalidOperationError(ERR_CREATE_SUBLAYER_NOT_SUPPORTED)}async _applySublayerProperties(e,r){}_serializeSublayer(e){return this._createSublayerRef()}_getSerializableProperties(){const e=super._getSerializableProperties();return{...e,visibilityMode:{...this._toPropertyDef(e.visibilityMode),serialize:()=>"inherited",deserialize:e=>{"inherited"!==e&&log.error(`SublayerExtension (id: ${this.id}, title: ${this.title}) visibilityMode cannot be set to ${e}.`)},default:"inherited"}}}};WMTSSublayerExtension=__decorate([serializable],WMTSSublayerExtension);export{WMTSSublayerExtension};
@@ -172,6 +172,16 @@ export declare abstract class LayerExtension<TProperties extends LayerExtensionP
172
172
  * The effective full extent of this layer extension.
173
173
  */
174
174
  get effectiveFullExtent(): Extent;
175
+ /**
176
+ * Determines whether the type of layer being extended supports changing
177
+ * Scale.
178
+ */
179
+ get canChangeScale(): boolean;
180
+ /**
181
+ * Determines whether the type of layer being extended supports changing
182
+ * opacity.
183
+ */
184
+ get canChangeOpacity(): boolean;
175
185
  /**
176
186
  * The layer's sublayers.
177
187
  */
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{CollectionProxy}from"../utilities/CollectionProxy.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(r){getLayerXLogger().error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${r}`)}};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if((null==i?void 0:i.hasOwnProperty("listMode"))&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?this.layer.title:void 0}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){var i;checkArg("portalItemLike",e).isNotMissing();const r=null!=t?t:{};checkArg("layerExtensionProperties.layer",r.layer).satisfies((e=>!isLayer(e)));const s={...r.layer};checkArg("layerExtensionProperties.layer.$ref",s.$ref).satisfies((e=>null==e));const a=new DefaultArcGISRequestHelper,n=toPortalItem(e);let o;await load(n);const l=null!==(i=n.typeKeywords)&&void 0!==i?i:"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o="ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType?o="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||l.includes("Elevation 3D Layer"))&&(o="ArcGISTiledElevationServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();s.featureCollection=e}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(s,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(s,e)}if(!o)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(s.layerType&&s.layerType!==o)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return s.layerType=o,s.$portalItem=n,r.layer=s,LayerExtension.create(r)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){var t,i,r;if(this.layer||!this._deferredLayerProperties)return;const s=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let a;e?a=e.find(s):(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)?(a=this.basemapExtension.basemap.baseLayers.find(s),a=a||this.basemapExtension.basemap.referenceLayers.find(s)):(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)?a=this.groundExtension.ground.layers.find(s):(null===(r=this.parentLayerExtension)||void 0===r?void 0:r.layer)?a=this.parentLayerExtension.layer.layers.find(s):this.mapExtension&&(a=this.mapExtension.map.layers.find(s)),a&&this._isSupportedLayer(a)&&(this._setLayer(a),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${e}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>{var t;return!e||e===(null===(t=this.getDefault("layer"))||void 0===t?void 0:t.layerType)}),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged.bind(this)),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange.bind(this)),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged.bind(this))}_onVisibleChanged(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")}_onSublayersSublayerVisibleChanged(e,t,i,r){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export class ArrayWrappedCollection extends CollectionProxy{constructor(e,t){if(super(),this._layerExtension=e,this._property=t,this._layerProperty=e instanceof LayerExtension?"layer":"sublayer",e[this._layerProperty])this._onLayerResolved(e[this._layerProperty]);else{this._collection=new Collection;const t=e.watch(this._layerProperty,(()=>{const i=e[this._layerProperty];this.length&&(i[this._property]=this.toArray()),this._onLayerResolved(i),t.remove()}),!0)}}add(e,t){const i=this._layerExtension[this._layerProperty];i&&!i[this._property]&&(i[this._property]=[],this._collection=wrapArrayWithCollection(i[this._property])),super.add(e,t)}_onLayerResolved(e){this._collection=wrapArrayWithCollection(e[this._property]||[]),e.watch(this._property,(()=>{this._collection=wrapArrayWithCollection(e[this._property]||[])}),!0)}}export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function wrapArrayWithCollection(e){const t=new Collection;return Object.defineProperty(t,"_items",{get:()=>e}),Object.defineProperty(t,"length",{get:()=>e.length,set:t=>e.length=t}),t}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){var t,i;return e instanceof LayerExtension?!!(null===(t=e._deferredLayerProperties)||void 0===t?void 0:t.$ref):!isLayer(e.layer)&&!!(null===(i=e.layer)||void 0===i?void 0:i.$ref)}
1
+ import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{CollectionProxy}from"../utilities/CollectionProxy.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(r){getLayerXLogger().error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${r}`)}};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if((null==i?void 0:i.hasOwnProperty("listMode"))&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){var e,t,i,r,s,a,n,o,l,y,h,p;return null!==(p=null!==(r=null!==(t=null===(e=this.layer)||void 0===e?void 0:e.title)&&void 0!==t?t:null===(i=this._deferredLayerProperties)||void 0===i?void 0:i.title)&&void 0!==r?r:"string"==typeof(null===(s=this._deferredLayerProperties)||void 0===s?void 0:s.$ref)?null===(a=this._deferredLayerProperties)||void 0===a?void 0:a.$ref:null!==(l=null===(o=null===(n=this._deferredLayerProperties)||void 0===n?void 0:n.$ref)||void 0===o?void 0:o.title)&&void 0!==l?l:null===(h=null===(y=this._deferredLayerProperties)||void 0===y?void 0:y.$ref)||void 0===h?void 0:h.id)&&void 0!==p?p:"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){var i;checkArg("portalItemLike",e).isNotMissing();const r=null!=t?t:{};checkArg("layerExtensionProperties.layer",r.layer).satisfies((e=>!isLayer(e)));const s={...r.layer};checkArg("layerExtensionProperties.layer.$ref",s.$ref).satisfies((e=>null==e));const a=new DefaultArcGISRequestHelper,n=toPortalItem(e);let o;await load(n);const l=null!==(i=n.typeKeywords)&&void 0!==i?i:"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o="ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType?o="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||l.includes("Elevation 3D Layer"))&&(o="ArcGISTiledElevationServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();s.featureCollection=e}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(s,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(s,e)}if(!o)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(s.layerType&&s.layerType!==o)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return s.layerType=o,s.$portalItem=n,r.layer=s,LayerExtension.create(r)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){var t,i,r;if(this.layer||!this._deferredLayerProperties)return;const s=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let a;e?a=e.find(s):(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)?(a=this.basemapExtension.basemap.baseLayers.find(s),a=a||this.basemapExtension.basemap.referenceLayers.find(s)):(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)?a=this.groundExtension.ground.layers.find(s):(null===(r=this.parentLayerExtension)||void 0===r?void 0:r.layer)?a=this.parentLayerExtension.layer.layers.find(s):this.mapExtension&&(a=this.mapExtension.map.layers.find(s)),a&&this._isSupportedLayer(a)&&(this._setLayer(a),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>{var t;return!e||e===(null===(t=this.getDefault("layer"))||void 0===t?void 0:t.layerType)}),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged.bind(this)),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange.bind(this)),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged.bind(this))}_onVisibleChanged(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")}_onSublayersSublayerVisibleChanged(e,t,i,r){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export class ArrayWrappedCollection extends CollectionProxy{constructor(e,t){if(super(),this._layerExtension=e,this._property=t,this._layerProperty=e instanceof LayerExtension?"layer":"sublayer",e[this._layerProperty])this._onLayerResolved(e[this._layerProperty]);else{this._collection=new Collection;const t=e.watch(this._layerProperty,(()=>{const i=e[this._layerProperty];this.length&&(i[this._property]=this.toArray()),this._onLayerResolved(i),t.remove()}),!0)}}add(e,t){const i=this._layerExtension[this._layerProperty];i&&!i[this._property]&&(i[this._property]=[],this._collection=wrapArrayWithCollection(i[this._property])),super.add(e,t)}_onLayerResolved(e){this._collection=wrapArrayWithCollection(e[this._property]||[]),e.watch(this._property,(()=>{this._collection=wrapArrayWithCollection(e[this._property]||[])}),!0)}}export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function wrapArrayWithCollection(e){const t=new Collection;return Object.defineProperty(t,"_items",{get:()=>e}),Object.defineProperty(t,"length",{get:()=>e.length,set:t=>e.length=t}),t}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){var t,i;return e instanceof LayerExtension?!!(null===(t=e._deferredLayerProperties)||void 0===t?void 0:t.$ref):!isLayer(e.layer)&&!!(null===(i=e.layer)||void 0===i?void 0:i.$ref)}
@@ -194,6 +194,12 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
194
194
  * changed, for example. The default is true.
195
195
  */
196
196
  get canChangeOpacity(): boolean;
197
+ /**
198
+ * Determines whether the type of sublayer being extended supports changing
199
+ * Scale. Sublayers belonging to tiled layers cannot have their scale
200
+ * changed, for example. The default is true.
201
+ */
202
+ get canChangeScale(): boolean;
197
203
  /**
198
204
  * Determines whether the type of sublayer being extended supports changing
199
205
  * its renderer.
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{isSublayerExtension,ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{serializable}from"../support/Serializable.js";import{isBuildingComponentSublayer,isBuildingGroupSublayer,isKMLSublayer,isMapImageSublayer,isTileLayer,isWMSSublayer,isWMTSSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{getLogger}from"../utilities/log.js";import{parse}from"../utilities/number.js";import{deepClone}from"../utilities/object.js";import{onCollectionPropertyChange,watchCollectionPropertyEach}from"../utilities/watch.js";import{fromLayerListMode,LayerListSettings}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const log=getLogger("SublayerExtension"),ERR_INVALID_SUBLAYER_TYPE="Invalid type of sublayer for this type of sublayer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_SUBLAYERX_NOT_SUPPORTED="This type of sublayer extension cannot have child sublayer extensions.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export function getSublayerType(e){if(isMapImageSublayer(e))return isTileLayer(null==e?void 0:e.layer)?"ArcGISTiledSublayer":"ArcGISMapServiceSublayer";if(isKMLSublayer(e))return"KMLSublayer";if(isWMTSSublayer(e))return"WMTSSublayer";if(isWMSSublayer(e))return"WMSSublayer";if(isBuildingComponentSublayer(e))return"BuildingComponentSublayer";if(isBuildingGroupSublayer(e))return"BuildingGroupSublayer";throw new Error(`Unknown sublayer type for ESRI sublayer: ${e}`)}export class SublayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.SUBLAYER_EXTENSION,this._watchHandles=[],this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(s){log.error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${s}`)}};const t=e||{};this._visibilityMode=this.canToggleVisibility?"independent":"inherited",this._sublayerExtensions=this._createSublayerExtensionCollection();const i=t.sublayer;let s;(null==i?void 0:i.hasOwnProperty("listMode"))&&(s=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),isSublayer(i)?(checkArg("properties.sublayer",i).satisfies((e=>this._isSupportedSublayer(e)),ERR_INVALID_SUBLAYER_TYPE),this._setSublayer(i)):i&&(this._deferredSublayerProperties=i),this.watch("parentSublayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible")))}get sublayer(){return this._sublayer}get layerExtension(){return this._layerExtension}get parentSublayerExtension(){return this._parentSublayerExtension}get hasFeatures(){return!1}get sublayerExtensions(){return this._sublayerExtensions}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){checkArg("visibilityMode",e).satisfies((e=>this.canToggleVisibility||"inherited"===e),'Sublayers of this type only support a visibility mode of "inherited".'),this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get capabilities(){return this._capabilities()}get effectiveMinScale(){const e=this.sublayer?this.sublayer.minScale:0;if(this.parentSublayerExtension){const t=this.parentSublayerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}if(this.layerExtension){const t=this.layerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}return e}get effectiveMaxScale(){const e=this.sublayer?this.sublayer.maxScale:0;return this.parentSublayerExtension&&this.parentSublayerExtension.effectiveMaxScale>e?this.parentSublayerExtension.effectiveMaxScale:this.layerExtension&&this.layerExtension.effectiveMaxScale>e?this.layerExtension.effectiveMaxScale:e}get isEffectivelyVisible(){const e=!!this.sublayer&&this.sublayer.visible;return this.parentSublayerExtension?this.parentSublayerExtension.isEffectivelyVisible&&e:this.layerExtension?this.layerExtension.isEffectivelyVisible&&e:e}get title(){return this.sublayer?this.sublayer.title:void 0}get supportsSublayers(){return!1}get canToggleVisibility(){return!0}get canChangeOpacity(){return!0}get canChangeRenderer(){return!1}get _layerSupportsHideChildren(){return!1}get _sublayers(){var e;if(this.supportsSublayers)return null===(e=this.sublayer)||void 0===e?void 0:e.sublayers}get effectiveFullExtent(){return this._effectiveFullExtent?this._effectiveFullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}static create(e){if(!SublayerExtension.factory)throw new InvalidOperationError("Cannot create sublayer extension: no sublayer extension factory has been registered.");return SublayerExtension.factory.create(e)}static _matchesRef(e,t,i){if(!e||!t)return!1;let s=t.$ref;if("string"==typeof s){const e=parse(s);s={id:isNaN(e)?s:e,title:s}}else"number"==typeof s&&(s={id:s});return"both"===i?e.id===s.id&&e.title===s.title:"by-id"===i?e.id===s.id:"by-title"===i&&e.title===s.title}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}_resolveSublayer(){if(this._sublayer||!this._deferredSublayerProperties||!this.layerExtension||!this.layerExtension.layer||!this.layerExtension.layer.sublayers)return;const e=e=>t=>SublayerExtension._matchesRef(t,this._deferredSublayerProperties,e),t=this.layerExtension.layer.sublayers.flatten((e=>e.sublayers));let i=t.find(e("both"));if(i||(i=t.find(e("by-title"))),i||(i=t.find(e("by-id"))),i&&this._isSupportedSublayer(i)){this._setSublayer(i);const e={sublayer:this._deferredSublayerProperties};this.assignProperties(e),this._originalRef=this._deferredSublayerProperties.$ref,this._deferredSublayerProperties=void 0}}_setLayerExtension(e){const t=this.layerExtension;this._layerExtension=e,this.layerExtension&&(this.layerExtension.watch("effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),this.layerExtension.watch("effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layerExtension.watch("isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible")))),this._parentSublayerExtension||(t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings))),this._resolveSublayer(),this.notifyChange("layerExtension"),this._sublayerExtensions.onLayerExtensionChanged()}_setParentSublayerExtension(e){const t=this._parentSublayerExtension;this._parentSublayerExtension=e,this.parentSublayerExtension&&(this.parentSublayerExtension.watch("effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),this.parentSublayerExtension.watch("effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale")))),t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.layerExtension?this.layerExtension.featureSettings.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=this.layerExtension?this.layerExtension.taskSettings:void 0)),e&&((!this.featureSettings.formatSettings.parent||this.layerExtension&&this.featureSettings.formatSettings.parent===this.layerExtension.featureSettings.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),(!this.taskSettings.parent||this.layerExtension&&this.taskSettings.parent===this.layerExtension.taskSettings)&&(this.taskSettings.parent=e.taskSettings)),this._resolveSublayer(),this.notifyChange("parentSublayerExtension")}async _switchSublayer(e){var t;if(e===this.sublayer)return;checkArg("newSublayer",e).isNotMissing().satisfies((e=>e.id===this.sublayer.id),"Sublayer ID must match existing sublayer.").satisfies((e=>this._isSupportedSublayer(e)),ERR_INVALID_SUBLAYER_TYPE),this.isInitialized&&await load(e);const i=new Map;if(null===(t=this.sublayer)||void 0===t?void 0:t.sublayers)for(const e of this.sublayer.sublayers.toArray())i.set(e.id,this.sublayerExtensions.forSublayer(e));this.canToggleVisibility&&(e.visible=this.sublayer.visible),this.canChangeOpacity&&(e.opacity=this.sublayer.opacity),this._setSublayer(e);const s=[];if(this.sublayer.sublayers){const e=this.sublayer.sublayers.filter((e=>i.has(e.id))).toArray();s.push(...e.map((async e=>{const t=i.get(e.id);await t._switchSublayer(e),this._sublayerExtensions._register(t)})))}this.isInitialized&&s.push(this._initializeChildren()),await Promise.all(s)}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"sublayer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:"initial",visibilityMode:{serializeModes:["initial"],default:this.canToggleVisibility?"independent":"inherited"},layerListSettings:"initial",sublayerExtensions:{serializeModes:["initial","project"],serialize:()=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},sublayer:{serializeModes:["initial","project"],serialize:()=>{if(this.sublayer){if(!this._layerExtension)return this._serializeSublayer(this._sublayer);{const e=getSublayerType(this._sublayer);if(this._originalRef)return{$ref:this._originalRef,$sublayerType:e};if(this._sublayer.title||this._sublayer.id)return{...this._createSublayerRef(),$sublayerType:e}}}else if(this._deferredSublayerProperties)return deepClone(this._deferredSublayerProperties)},deserialize:e=>{if(isSublayer(e)){if(e!==this.sublayer)throw new Error("Property 'sublayer' is read-only.")}else this._sublayer?this._applySublayerProperties(e,this._sublayer):this._deferredSublayerProperties&&(this._deferredSublayerProperties={...this._deferredSublayerProperties,...e})}},requestHelper:{serialize:!1}}}_createSublayerExtension(e){throw new InvalidOperationError(ERR_SUBLAYERX_NOT_SUPPORTED)}_createSchema(){return new SublayerSchema(this)}_createLayerListSettings(e){return new LayerListSettings(e)}_capabilities(){return DEFAULT_CAPABILITIES}async _onInitialize(){var e,t;if(await super._onInitialize(),this._sublayer||this._deferredSublayerProperties&&(null===(e=this._deferredSublayerProperties)||void 0===e?void 0:e.$ref)||(this._setSublayer(await this._createSublayer(this._deferredSublayerProperties)),this._deferredSublayerProperties=void 0),this._resolveSublayer(),!this._sublayer){const e=null===(t=this._deferredSublayerProperties)||void 0===t?void 0:t.$ref;if(!this._layerExtension)throw new InvalidOperationError("Cannot resolve sublayer reference: missing parent layer extension.");throw new InvalidOperationError(`No sublayer found matching reference "${e}".`)}this._sublayerExtensions.onParentInitialized()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}_createSublayerRef(){return{$ref:{id:this._sublayer.id,title:this._sublayer.title}}}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollection(this)}_setSublayer(e){this._sublayer=e,e.watch("visible",this._onSetSublayerVisible.bind(this),!0),this.supportsSublayers&&(onCollectionPropertyChange(e,"sublayers",this._onSublayersChange.bind(this),!0),watchCollectionPropertyEach(e,"sublayers","visible",this._onSetSublayersSublayerVisible.bind(this),!0)),this._onSetSublayerVisible(this.sublayer.visible),"exclusive"===this.visibilityMode&&this._ensureAtMostOneChildSublayerVisible(),this.sublayer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.sublayer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.notifyChange("sublayer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_onSetSublayerVisible(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this.sublayerExtensions)for(const t of this.sublayerExtensions.toArray())t.sublayer&&t.canToggleVisibility&&(t.sublayer.visible=e);this.notifyChange("isEffectivelyVisible")}_onSetSublayersSublayerVisible(e,t,i,s){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(s)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.sublayer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}let SublayerSchema=class extends Schema{constructor(e){super(),this._sublayerExtension=e}get spatialReference(){if(this._sublayerExtension.layerExtension)return this._sublayerExtension.layerExtension.schema.spatialReference}set spatialReference(e){throw new InvalidOperationError("Cannot set sublayer schema spatial reference.")}};SublayerSchema=__decorate([serializable],SublayerSchema);export{SublayerSchema};export class SubSublayerExtensionCollection extends SublayerExtensionCollectionBase{constructor(e){super(e,"sublayer.sublayers")}get _layerExtension(){return this._parent.layerExtension}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._parent.supportsSublayers)throw new InvalidOperationError(ERR_SUBLAYERX_NOT_SUPPORTED);e.sublayer&&this._parent.sublayer&&!this._parent.sublayer.sublayers&&(this._parent.sublayer.sublayers=[]),e.parentSublayerExtension&&e.parentSublayerExtension.sublayerExtensions.remove(e),super.add(e,t)}_onAdded(e){super._onAdded(e),e._setParentSublayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentSublayerExtension(void 0)}}export function _assignSublayerExtensions(e,t,i){compare(e,t,{onNew:(t,s)=>{e.add(isSublayerExtension(t)?t:i(t),isSublayerRef(t)?void 0:s)},onMatch:(t,i,s,r)=>{isSublayerExtension(i)||t.assignProperties(i),s===r||isSublayerRef(i)||e.reorder(t,r)},equals:(e,t)=>isSublayerExtension(t)?t===e:!!SublayerExtension._matchesRef(e.sublayer,t.sublayer,"both")||e.id===t.id})}function isSublayer(e){return e&&"function"==typeof e.get}function isSublayerRef(e){var t,i;return isSublayerExtension(e)?!!(null===(t=e._deferredSublayerProperties)||void 0===t?void 0:t.$ref):!isSublayer(e.sublayer)&&!!(null===(i=e.sublayer)||void 0===i?void 0:i.$ref)}
1
+ import{__decorate}from"tslib";import{InvalidOperationError}from"../InvalidOperationError.js";import{isSublayerExtension,ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{serializable}from"../support/Serializable.js";import{isBuildingComponentSublayer,isBuildingGroupSublayer,isKMLSublayer,isMapImageSublayer,isTileLayer,isWMSSublayer,isWMTSSublayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{getLogger}from"../utilities/log.js";import{parse}from"../utilities/number.js";import{deepClone}from"../utilities/object.js";import{onCollectionPropertyChange,watchCollectionPropertyEach}from"../utilities/watch.js";import{fromLayerListMode,LayerListSettings}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const log=getLogger("SublayerExtension"),ERR_INVALID_SUBLAYER_TYPE="Invalid type of sublayer for this type of sublayer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_SUBLAYERX_NOT_SUPPORTED="This type of sublayer extension cannot have child sublayer extensions.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export function getSublayerType(e){if(isMapImageSublayer(e))return isTileLayer(null==e?void 0:e.layer)?"ArcGISTiledSublayer":"ArcGISMapServiceSublayer";if(isKMLSublayer(e))return"KMLSublayer";if(isWMTSSublayer(e))return"WMTSSublayer";if(isWMSSublayer(e))return"WMSSublayer";if(isBuildingComponentSublayer(e))return"BuildingComponentSublayer";if(isBuildingGroupSublayer(e))return"BuildingGroupSublayer";throw new Error(`Unknown sublayer type for ESRI sublayer: ${e}`)}export class SublayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.SUBLAYER_EXTENSION,this._watchHandles=[],this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(s){log.error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${s}`)}};const t=e||{};this._visibilityMode=this.canToggleVisibility?"independent":"inherited",this._sublayerExtensions=this._createSublayerExtensionCollection();const i=t.sublayer;let s;(null==i?void 0:i.hasOwnProperty("listMode"))&&(s=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),isSublayer(i)?(checkArg("properties.sublayer",i).satisfies((e=>this._isSupportedSublayer(e)),ERR_INVALID_SUBLAYER_TYPE),this._setSublayer(i)):i&&(this._deferredSublayerProperties=i),this.watch("parentSublayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible")))}get sublayer(){return this._sublayer}get layerExtension(){return this._layerExtension}get parentSublayerExtension(){return this._parentSublayerExtension}get hasFeatures(){return!1}get sublayerExtensions(){return this._sublayerExtensions}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){checkArg("visibilityMode",e).satisfies((e=>this.canToggleVisibility||"inherited"===e),'Sublayers of this type only support a visibility mode of "inherited".'),this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get capabilities(){return this._capabilities()}get effectiveMinScale(){const e=this.sublayer?this.sublayer.minScale:0;if(this.parentSublayerExtension){const t=this.parentSublayerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}if(this.layerExtension){const t=this.layerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}return e}get effectiveMaxScale(){const e=this.sublayer?this.sublayer.maxScale:0;return this.parentSublayerExtension&&this.parentSublayerExtension.effectiveMaxScale>e?this.parentSublayerExtension.effectiveMaxScale:this.layerExtension&&this.layerExtension.effectiveMaxScale>e?this.layerExtension.effectiveMaxScale:e}get isEffectivelyVisible(){const e=!!this.sublayer&&this.sublayer.visible;return this.parentSublayerExtension?this.parentSublayerExtension.isEffectivelyVisible&&e:this.layerExtension?this.layerExtension.isEffectivelyVisible&&e:e}get title(){var e,t,i,s,r,a,n,l,o,u,y;return null!==(y=null!==(t=null===(e=this.sublayer)||void 0===e?void 0:e.title)&&void 0!==t?t:"string"==typeof(null===(i=this._deferredSublayerProperties)||void 0===i?void 0:i.$ref)||"number"==typeof(null===(s=this._deferredSublayerProperties)||void 0===s?void 0:s.$ref)?null===(r=this._deferredSublayerProperties)||void 0===r?void 0:r.$ref.toString():null!==(l=null===(n=null===(a=this._deferredSublayerProperties)||void 0===a?void 0:a.$ref)||void 0===n?void 0:n.title)&&void 0!==l?l:null===(u=null===(o=this._deferredSublayerProperties)||void 0===o?void 0:o.$ref)||void 0===u?void 0:u.id.toString())&&void 0!==y?y:"Sublayer"}get supportsSublayers(){return!1}get canToggleVisibility(){return!0}get canChangeOpacity(){return!0}get canChangeScale(){return!0}get canChangeRenderer(){return!1}get _layerSupportsHideChildren(){return!1}get _sublayers(){var e;if(this.supportsSublayers)return null===(e=this.sublayer)||void 0===e?void 0:e.sublayers}get effectiveFullExtent(){return this._effectiveFullExtent?this._effectiveFullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}static create(e){if(!SublayerExtension.factory)throw new InvalidOperationError("Cannot create sublayer extension: no sublayer extension factory has been registered.");return SublayerExtension.factory.create(e)}static _matchesRef(e,t,i){if(!e||!t)return!1;let s=t.$ref;if("string"==typeof s){const e=parse(s);s={id:isNaN(e)?s:e,title:s}}else"number"==typeof s&&(s={id:s});return"both"===i?e.id===s.id&&e.title===s.title:"by-id"===i?e.id===s.id:"by-title"===i&&e.title===s.title}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}_resolveSublayer(){if(this._sublayer||!this._deferredSublayerProperties||!this.layerExtension||!this.layerExtension.layer||!this.layerExtension.layer.sublayers)return;const e=e=>t=>SublayerExtension._matchesRef(t,this._deferredSublayerProperties,e),t=this.layerExtension.layer.sublayers.flatten((e=>e.sublayers));let i=t.find(e("both"));if(i||(i=t.find(e("by-title"))),i||(i=t.find(e("by-id"))),i&&this._isSupportedSublayer(i)){this._setSublayer(i);const e={sublayer:this._deferredSublayerProperties};this.assignProperties(e),this._originalRef=this._deferredSublayerProperties.$ref,this._deferredSublayerProperties=void 0}}_setLayerExtension(e){const t=this.layerExtension;this._layerExtension=e,this.layerExtension&&(this.layerExtension.watch("effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),this.layerExtension.watch("effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layerExtension.watch("isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible")))),this._parentSublayerExtension||(t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings))),this._resolveSublayer(),this.notifyChange("layerExtension"),this._sublayerExtensions.onLayerExtensionChanged()}_setParentSublayerExtension(e){const t=this._parentSublayerExtension;this._parentSublayerExtension=e,this.parentSublayerExtension&&(this.parentSublayerExtension.watch("effectiveMinScale",(()=>this.notifyChange("effectiveMinScale"))),this.parentSublayerExtension.watch("effectiveMaxScale",(()=>this.notifyChange("effectiveMaxScale")))),t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.layerExtension?this.layerExtension.featureSettings.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=this.layerExtension?this.layerExtension.taskSettings:void 0)),e&&((!this.featureSettings.formatSettings.parent||this.layerExtension&&this.featureSettings.formatSettings.parent===this.layerExtension.featureSettings.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),(!this.taskSettings.parent||this.layerExtension&&this.taskSettings.parent===this.layerExtension.taskSettings)&&(this.taskSettings.parent=e.taskSettings)),this._resolveSublayer(),this.notifyChange("parentSublayerExtension")}async _switchSublayer(e){var t;if(e===this.sublayer)return;checkArg("newSublayer",e).isNotMissing().satisfies((e=>e.id===this.sublayer.id),"Sublayer ID must match existing sublayer.").satisfies((e=>this._isSupportedSublayer(e)),ERR_INVALID_SUBLAYER_TYPE),this.isInitialized&&await load(e);const i=new Map;if(null===(t=this.sublayer)||void 0===t?void 0:t.sublayers)for(const e of this.sublayer.sublayers.toArray())i.set(e.id,this.sublayerExtensions.forSublayer(e));this.canToggleVisibility&&(e.visible=this.sublayer.visible),this.canChangeOpacity&&(e.opacity=this.sublayer.opacity),this._setSublayer(e);const s=[];if(this.sublayer.sublayers){const e=this.sublayer.sublayers.filter((e=>i.has(e.id))).toArray();s.push(...e.map((async e=>{const t=i.get(e.id);await t._switchSublayer(e),this._sublayerExtensions._register(t)})))}this.isInitialized&&s.push(this._initializeChildren()),await Promise.all(s)}async _postInitialize(){await super._postInitialize(),this._watchHandles.push(onCollectionPropertyChange(this,"sublayer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:"initial",visibilityMode:{serializeModes:["initial"],default:this.canToggleVisibility?"independent":"inherited"},layerListSettings:"initial",sublayerExtensions:{serializeModes:["initial","project"],serialize:()=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},sublayer:{serializeModes:["initial","project"],serialize:()=>{if(this.sublayer){if(!this._layerExtension)return this._serializeSublayer(this._sublayer);{const e=getSublayerType(this._sublayer);if(this._originalRef)return{$ref:this._originalRef,$sublayerType:e};if(this._sublayer.title||this._sublayer.id)return{...this._createSublayerRef(),$sublayerType:e}}}else if(this._deferredSublayerProperties)return deepClone(this._deferredSublayerProperties)},deserialize:e=>{if(isSublayer(e)){if(e!==this.sublayer)throw new Error("Property 'sublayer' is read-only.")}else this._sublayer?this._applySublayerProperties(e,this._sublayer):this._deferredSublayerProperties&&(this._deferredSublayerProperties={...this._deferredSublayerProperties,...e})}},requestHelper:{serialize:!1}}}_createSublayerExtension(e){throw new InvalidOperationError(ERR_SUBLAYERX_NOT_SUPPORTED)}_createSchema(){return new SublayerSchema(this)}_createLayerListSettings(e){return new LayerListSettings(e)}_capabilities(){return DEFAULT_CAPABILITIES}async _onInitialize(){var e,t;if(await super._onInitialize(),this._sublayer||this._deferredSublayerProperties&&(null===(e=this._deferredSublayerProperties)||void 0===e?void 0:e.$ref)||(this._setSublayer(await this._createSublayer(this._deferredSublayerProperties)),this._deferredSublayerProperties=void 0),this._resolveSublayer(),!this._sublayer){const e=null===(t=this._deferredSublayerProperties)||void 0===t?void 0:t.$ref;if(!this._layerExtension)throw new InvalidOperationError("Cannot resolve sublayer reference: missing parent layer extension.");throw new InvalidOperationError(`No sublayer found matching reference "${e}".`)}this._sublayerExtensions.onParentInitialized()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}_createSublayerRef(){return{$ref:{id:this._sublayer.id,title:this._sublayer.title}}}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollection(this)}_setSublayer(e){this._sublayer=e,e.watch("visible",this._onSetSublayerVisible.bind(this),!0),this.supportsSublayers&&(onCollectionPropertyChange(e,"sublayers",this._onSublayersChange.bind(this),!0),watchCollectionPropertyEach(e,"sublayers","visible",this._onSetSublayersSublayerVisible.bind(this),!0)),this._onSetSublayerVisible(this.sublayer.visible),"exclusive"===this.visibilityMode&&this._ensureAtMostOneChildSublayerVisible(),this.sublayer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.sublayer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.notifyChange("sublayer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_onSetSublayerVisible(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this.sublayerExtensions)for(const t of this.sublayerExtensions.toArray())t.sublayer&&t.canToggleVisibility&&(t.sublayer.visible=e);this.notifyChange("isEffectivelyVisible")}_onSetSublayersSublayerVisible(e,t,i,s){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(s)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.sublayer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}let SublayerSchema=class extends Schema{constructor(e){super(),this._sublayerExtension=e}get spatialReference(){if(this._sublayerExtension.layerExtension)return this._sublayerExtension.layerExtension.schema.spatialReference}set spatialReference(e){throw new InvalidOperationError("Cannot set sublayer schema spatial reference.")}};SublayerSchema=__decorate([serializable],SublayerSchema);export{SublayerSchema};export class SubSublayerExtensionCollection extends SublayerExtensionCollectionBase{constructor(e){super(e,"sublayer.sublayers")}get _layerExtension(){return this._parent.layerExtension}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._parent.supportsSublayers)throw new InvalidOperationError(ERR_SUBLAYERX_NOT_SUPPORTED);e.sublayer&&this._parent.sublayer&&!this._parent.sublayer.sublayers&&(this._parent.sublayer.sublayers=[]),e.parentSublayerExtension&&e.parentSublayerExtension.sublayerExtensions.remove(e),super.add(e,t)}_onAdded(e){super._onAdded(e),e._setParentSublayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentSublayerExtension(void 0)}}export function _assignSublayerExtensions(e,t,i){compare(e,t,{onNew:(t,s)=>{e.add(isSublayerExtension(t)?t:i(t),isSublayerRef(t)?void 0:s)},onMatch:(t,i,s,r)=>{isSublayerExtension(i)||t.assignProperties(i),s===r||isSublayerRef(i)||e.reorder(t,r)},equals:(e,t)=>isSublayerExtension(t)?t===e:!!SublayerExtension._matchesRef(e.sublayer,t.sublayer,"both")||e.id===t.id})}function isSublayer(e){return e&&"function"==typeof e.get}function isSublayerRef(e){var t,i;return isSublayerExtension(e)?!!(null===(t=e._deferredSublayerProperties)||void 0===t?void 0:t.$ref):!isSublayer(e.sublayer)&&!!(null===(i=e.sublayer)||void 0===i?void 0:i.$ref)}
@@ -4,10 +4,8 @@ import type BuildingGroupSublayer from "@arcgis/core/layers/buildingSublayers/Bu
4
4
  import type Sublayer from "@arcgis/core/layers/support/Sublayer";
5
5
  import { PropertyDefs, SerializableBase } from "../../support/Serializable.js";
6
6
  import type { ListMode } from "../../support/esri.js";
7
- import type { ArcGISSublayerExtension } from "../ArcGISSublayerExtension.js";
8
- import type { BuildingComponentSublayerExtension } from "../BuildingComponentSublayerExtension.js";
9
- import type { BuildingGroupSublayerExtension } from "../BuildingGroupSublayerExtension.js";
10
7
  import type { LayerExtension } from "../_LayerExtension.js";
8
+ import type { SublayerExtension } from "../_SublayerExtension.js";
11
9
  /**
12
10
  * Properties that can be used to initialize an instance of {@link LayerListSettings}.
13
11
  */
@@ -47,6 +45,18 @@ export declare class LayerListSettings extends SerializableBase<LayerListSetting
47
45
  */
48
46
  get included(): boolean;
49
47
  set included(value: boolean);
48
+ /**
49
+ * Initial value of the expanded property.
50
+ */
51
+ get initialExpanded(): boolean;
52
+ /**
53
+ * Initial value of the childrenIncluded property.
54
+ */
55
+ get initialChildrenIncluded(): boolean;
56
+ /**
57
+ * Initial value of the included property.
58
+ */
59
+ get initialIncluded(): boolean;
50
60
  /**
51
61
  * Whether child layers should be included in the layer list. This value may
52
62
  * not be set to true, if the associated LayerExtension or SublayerExtension
@@ -54,6 +64,9 @@ export declare class LayerListSettings extends SerializableBase<LayerListSetting
54
64
  */
55
65
  get childrenIncluded(): boolean;
56
66
  set childrenIncluded(value: boolean);
67
+ protected _initialExpanded: boolean;
68
+ protected _initialIncluded: boolean;
69
+ protected _initialChildrenIncluded: boolean;
57
70
  private _childrenIncluded;
58
71
  private _expanded;
59
72
  private _included;
@@ -70,7 +83,7 @@ export declare abstract class ExtensionBaseLayerListSettings extends LayerListSe
70
83
  * The LayerExtension or SublayerExtension to which the Layer List settings
71
84
  * apply.
72
85
  */
73
- protected readonly _extension: LayerExtension | ArcGISSublayerExtension | BuildingGroupSublayerExtension | BuildingComponentSublayerExtension;
86
+ protected readonly _extension: LayerExtension | SublayerExtension;
74
87
  /**
75
88
  * The Layer or Sublayer associated with the extension.
76
89
  */
@@ -79,7 +92,7 @@ export declare abstract class ExtensionBaseLayerListSettings extends LayerListSe
79
92
  * The path to the listMode property, relative to the extension.
80
93
  */
81
94
  protected abstract get _listModePath(): string;
82
- constructor(properties: LayerListSettingsProperties, extension: LayerExtension | ArcGISSublayerExtension | BuildingGroupSublayerExtension | BuildingComponentSublayerExtension);
95
+ constructor(properties: LayerListSettingsProperties, extension: LayerExtension | SublayerExtension);
83
96
  /**
84
97
  * @inheritdoc
85
98
  */