@arcgis/core 5.2.0-next.163 → 5.2.0-next.165
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.
- package/Graphic.d.ts +47 -14
- package/PopupTemplate.js +1 -1
- package/WebScene.d.ts +3 -0
- package/analysis/LineOfSightAnalysis.d.ts +1 -1
- package/analysis/LineOfSightAnalysisObserver.d.ts +5 -4
- package/analysis/LineOfSightAnalysisTarget.d.ts +4 -4
- package/analysis/Viewshed.d.ts +4 -4
- package/assets/esri/core/workers/RemoteClient.js +1 -1
- package/assets/esri/core/workers/chunks/{97d6ef9e34a43ad2e556.js → 02e10f44edf911832c2a.js} +1 -1
- package/assets/esri/core/workers/chunks/{97b5f4302fb867c829f4.js → 07f7177bfaf9de73bc25.js} +1 -1
- package/assets/esri/core/workers/chunks/{612345f17f5eeb99ea8f.js → 0d9c4c6c571ce26d356b.js} +1 -1
- package/assets/esri/core/workers/chunks/{8e19629899a5becf8e19.js → 150e7a7bd5df25693da7.js} +1 -1
- package/assets/esri/core/workers/chunks/{12a7997a40c77f5c9160.js → 151e5799ede763a03ee2.js} +1 -1
- package/assets/esri/core/workers/chunks/196979cc6a765be3c5cd.js +1 -0
- package/assets/esri/core/workers/chunks/1ab59a97ffa49e9e1659.js +1 -0
- package/assets/esri/core/workers/chunks/{8715661a838361d4211a.js → 1b24a40c0fa197014873.js} +1 -1
- package/assets/esri/core/workers/chunks/{83f29a159b8b5197e76a.js → 266c90d8d56a2da42fcf.js} +1 -1
- package/assets/esri/core/workers/chunks/{b1d989b72203113a06fe.js → 2a36fe3f3f257a779a1b.js} +1 -1
- package/assets/esri/core/workers/chunks/{fcaf9450642fcef83286.js → 3048e74e6246324ce6fc.js} +1 -1
- package/assets/esri/core/workers/chunks/{95b82cbbe355266c65d7.js → 30af63b3b750142faadb.js} +1 -1
- package/assets/esri/core/workers/chunks/{74137ffec5265628c33b.js → 36c780a9527c75b36725.js} +1 -1
- package/assets/esri/core/workers/chunks/{6a0ec102962d2c7b4368.js → 40d803584eeade4df433.js} +1 -1
- package/assets/esri/core/workers/chunks/{a546ec82ba149e12f7bf.js → 41773d858e212468db88.js} +1 -1
- package/assets/esri/core/workers/chunks/{129e04d24ced77c9bb6d.js → 49b967d89d2841cea675.js} +1 -1
- package/assets/esri/core/workers/chunks/{b59aaf30c7fe2c8d1aaa.js → 4b99b4cf729881e616bc.js} +1 -1
- package/assets/esri/core/workers/chunks/{2e096537a3a5555a4a93.js → 4cb751dc8d00bdaeb04c.js} +1 -1
- package/assets/esri/core/workers/chunks/{a09d2e1e2540921e4717.js → 4d3d7ec407ee5cd5f036.js} +1 -1
- package/assets/esri/core/workers/chunks/{85bba551057366cd00ae.js → 4db829a0238024736fe6.js} +1 -1
- package/assets/esri/core/workers/chunks/{2c626f525f3483c03477.js → 548b8f74a6883e364931.js} +1 -1
- package/assets/esri/core/workers/chunks/{25a3bd8bede2d07d3a54.js → 5af8fb4ec2c72697e35b.js} +1 -1
- package/assets/esri/core/workers/chunks/{340256866f524cb069f6.js → 5d2f043ebe1051326c56.js} +1 -1
- package/assets/esri/core/workers/chunks/{3f46acfda693c70abbdd.js → 61552b4b8111a8624d84.js} +1 -1
- package/assets/esri/core/workers/chunks/{e653c81ffb3d818645dd.js → 632fdf1d95ad69109427.js} +1 -1
- package/assets/esri/core/workers/chunks/{434a8ba841a59e0deab9.js → 67e533748435253aaba6.js} +1 -1
- package/assets/esri/core/workers/chunks/69d5f8ef78b9b8b3d33d.js +1 -0
- package/assets/esri/core/workers/chunks/{feb41abc03d677df6f73.js → 6b9961261241fdce0e94.js} +1 -1
- package/assets/esri/core/workers/chunks/6f897b4e7ddd1dd1672b.js +1 -0
- package/assets/esri/core/workers/chunks/{8aa80b892fde552577e8.js → 700b1d5bc67b7e1b3ff3.js} +1 -1
- package/assets/esri/core/workers/chunks/{e251921bc5367258c4d2.js → 710b8251a59884aee31e.js} +1 -1
- package/assets/esri/core/workers/chunks/{f528ac5c648ca6a98582.js → 711cfb84659cb4437679.js} +1 -1
- package/assets/esri/core/workers/chunks/{af349c7bc8ef41a0e1bd.js → 7748c2886d0122b40eeb.js} +1 -1
- package/assets/esri/core/workers/chunks/{8a7b02037151767542f1.js → 7dbf4c7480bf9c72820d.js} +1 -1
- package/assets/esri/core/workers/chunks/{1bca39e0e651426bdbb5.js → 7dfbc31f3b56728485a4.js} +1 -1
- package/assets/esri/core/workers/chunks/{c19f238b55ff2893f7c2.js → 82a022cc21364c9a8539.js} +1 -1
- package/assets/esri/core/workers/chunks/{5cb26bbaa08114aec5ce.js → 89cc1a5539b82fb46216.js} +1 -1
- package/assets/esri/core/workers/chunks/{8ab57cb1bfd3dc8d3c2a.js → 8b8118ab56cc808b5a71.js} +1 -1
- package/assets/esri/core/workers/chunks/{542e5640ea1b80ef801a.js → 9189dfe19a2a2ccd5173.js} +1 -1
- package/assets/esri/core/workers/chunks/{f74ae0eff3f08978e607.js → 9f358c7b052cdc0ac06f.js} +1 -1
- package/assets/esri/core/workers/chunks/{ee08ae5b73439a1ff666.js → a163c6005aba3378edaa.js} +1 -1
- package/assets/esri/core/workers/chunks/{ec9a2425b4a498054a19.js → a17673e691ced46a90d3.js} +1 -1
- package/assets/esri/core/workers/chunks/{72bd866df89b8d92e247.js → a43b33955aa78a2a8deb.js} +1 -1
- package/assets/esri/core/workers/chunks/{46c5371c7a627537098c.js → a88f346786b04bd194dc.js} +6 -6
- package/assets/esri/core/workers/chunks/{092e311cb7aea92a6a26.js → acb265a22be5e12f38e5.js} +1 -1
- package/assets/esri/core/workers/chunks/ad96132bc89671e595f3.js +1 -0
- package/assets/esri/core/workers/chunks/{9e8f012a56237fc8285f.js → aea44253c80493ef5755.js} +1 -1
- package/assets/esri/core/workers/chunks/b5b9d42e1f84ee82429c.js +1 -0
- package/assets/esri/core/workers/chunks/c046c4fc934bc6f54c69.js +1 -0
- package/assets/esri/core/workers/chunks/{c72a904e01dc8c17d992.js → c47d095434d09b5f10c6.js} +1 -1
- package/assets/esri/core/workers/chunks/c4b7111dcedd9d6e1c2a.js +1 -0
- package/assets/esri/core/workers/chunks/{81cad8d2f62a5f671c55.js → cb4db5489388559d6bd9.js} +1 -1
- package/assets/esri/core/workers/chunks/{bbd44ac63d2a317d8ed9.js → cc794bb94ebc1cb66024.js} +1 -1
- package/assets/esri/core/workers/chunks/{be308db5b61a7246edfe.js → cc94bf05b235e65291fc.js} +1 -1
- package/assets/esri/core/workers/chunks/d4af9faa5d901274fad2.js +1 -0
- package/assets/esri/core/workers/chunks/d77c68e0fc3b259bf4f9.js +1 -0
- package/assets/esri/core/workers/chunks/{fc5a36e54929e03efa86.js → dba5f44c4e4a3f075df2.js} +1 -1
- package/assets/esri/core/workers/chunks/{1f43e06dcfe56229bb0f.js → debe45e792212682b304.js} +1 -1
- package/assets/esri/core/workers/chunks/{8414ffd937c1099e0bbc.js → e6d10136bc08aef255ff.js} +1 -1
- package/assets/esri/core/workers/chunks/{45fd2b456a6997584ca1.js → f8379cd45f750f28a3d8.js} +1 -1
- package/assets/esri/core/workers/chunks/{709e019885822b1f6f3e.js → f905f1a1aa4c123cbe83.js} +1 -1
- package/assets/esri/core/workers/chunks/{a2fcbc494333376192aa.js → f9c80e9fc349db4873e8.js} +1 -1
- package/assets/esri/core/workers/chunks/{e0351753f6b4d1adf11e.js → fc0dbb588a4062615cb6.js} +1 -1
- package/assets/esri/core/workers/chunks/feb4f8c807bb0dca488f.js +1 -0
- package/assets/esri/layers/raster/formats/lerc-wasm.wasm +0 -0
- package/chunks/GlobalIllumination.glsl.js +17 -47
- package/config.js +1 -1
- package/core/workers/WorkerFallback.js +4 -2
- package/core/workers/workerFactory.js +1 -1
- package/core/workers/workers.js +4 -2
- package/form/elements/inputs.d.ts +126 -25
- package/form/elements/inputs.js +1 -1
- package/form/elements.d.ts +1 -0
- package/geometry/support/clipRay.js +1 -1
- package/geometry/support/plane.js +1 -1
- package/graphic/AnnotationFeatureGraphicOrigin.d.ts +49 -9
- package/graphic/BuildingGraphicOrigin.d.ts +49 -0
- package/graphic/CSVGraphicOrigin.d.ts +42 -9
- package/graphic/CatalogGraphicOrigin.d.ts +42 -9
- package/graphic/DimensionFeatureGraphicOrigin.d.ts +42 -9
- package/graphic/FeatureGraphicOrigin.d.ts +42 -9
- package/graphic/GeoJSONGraphicOrigin.d.ts +42 -9
- package/graphic/GeoRSSGraphicOrigin.d.ts +42 -9
- package/graphic/GraphicOrigin.d.ts +52 -12
- package/graphic/ImageryGraphicOrigin.d.ts +42 -9
- package/graphic/ImageryTileGraphicOrigin.d.ts +42 -9
- package/graphic/KMLGraphicOrigin.d.ts +47 -10
- package/graphic/KnowledgeGraphGraphicOrigin.d.ts +49 -1
- package/graphic/LinkChartGraphicOrigin.d.ts +49 -1
- package/graphic/MapImageGraphicOrigin.d.ts +49 -1
- package/graphic/MapNotesGraphicOrigin.d.ts +48 -1
- package/graphic/OGCFeatureGraphicOrigin.d.ts +42 -9
- package/graphic/OrientedImageryGraphicOrigin.d.ts +42 -9
- package/graphic/ParquetGraphicOrigin.d.ts +42 -9
- package/graphic/PointCloudGraphicOrigin.d.ts +43 -0
- package/graphic/SceneGraphicOrigin.d.ts +43 -0
- package/graphic/SketchGraphicOrigin.d.ts +43 -0
- package/graphic/StreamGraphicOrigin.d.ts +43 -0
- package/graphic/SubtypeGroupGraphicOrigin.d.ts +49 -1
- package/graphic/TileGraphicOrigin.d.ts +49 -1
- package/graphic/VectorTileGraphicOrigin.d.ts +43 -14
- package/graphic/VoxelGraphicOrigin.d.ts +43 -0
- package/graphic/WCSGraphicOrigin.d.ts +43 -0
- package/graphic/WFSGraphicOrigin.d.ts +42 -9
- package/graphic/getGraphicOriginTitle.d.ts +21 -3
- package/kernel.js +1 -1
- package/layers/GaussianSplatLayer.d.ts +2 -1
- package/layers/GeoJSONLayer.d.ts +2 -107
- package/layers/ParquetLayer.d.ts +24 -1
- package/layers/ParquetLayer.js +1 -1
- package/layers/SceneLayer.d.ts +40 -16
- package/layers/ViewshedLayer.d.ts +10 -4
- package/layers/WMSLayer.d.ts +2 -69
- package/layers/mixins/ReloadableLayer.js +1 -1
- package/layers/mixins/SublayersOwner.js +1 -1
- package/layers/mixins/TemporalLayer.d.ts +70 -48
- package/layers/mixins/TiledImagery.d.ts +0 -11
- package/layers/orientedImagery/transformations/utils.js +1 -1
- package/layers/save/featureLayerUtils.js +1 -1
- package/layers/save/imageryUtils.js +1 -1
- package/layers/save/mapImageLayerUtils.js +1 -1
- package/layers/save/mediaLayerUtils.js +1 -1
- package/layers/save/parquetLayerUtils.js +2 -0
- package/layers/save/streamLayerUtils.js +1 -1
- package/layers/support/LabelClass.d.ts +8 -2
- package/layers/support/Sublayer.js +1 -1
- package/layers/support/SubtypeSublayer.js +1 -1
- package/layers/support/layerUtils.js +1 -1
- package/layers/support/layersMapping.js +1 -1
- package/package.json +2 -2
- package/popup/content.d.ts +38 -1
- package/popup/content.js +1 -1
- package/portal/schemas/definitions.js +1 -1
- package/portal/schemas/webScene.js +1 -1
- package/smartMapping/popup/support/clusterUtils.js +1 -1
- package/smartMapping/popup/support/utils.js +2 -2
- package/smartMapping/renderers/size.js +1 -1
- package/smartMapping/renderers/support/regenerateUtils.js +1 -1
- package/support/timeUtils.d.ts +11 -0
- package/symbols/cim/CIMCursor.js +1 -1
- package/tables/elements.d.ts +1 -0
- package/views/2d/engine/webgl/GlyphWorker.js +1 -1
- package/views/2d/engine/webgl/SpriteMosaic.js +1 -1
- package/views/2d/engine/webgl/animations/instructions.js +1 -1
- package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
- package/views/3d/environment/SunLighting.d.ts +0 -1
- package/views/3d/environment/SunLighting.js +1 -1
- package/views/3d/environment/VirtualLighting.d.ts +0 -1
- package/views/3d/environment/VirtualLighting.js +1 -1
- package/views/3d/layers/support/featureTileQuery3D.js +1 -1
- package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
- package/views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js +5 -5
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.glsl.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +1 -1
- package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +1 -1
- package/views/3d/webgl-engine/effects/glow/applyEmissiveGlow.glsl.js +9 -4
- package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
- package/views/3d/webgl-engine/lib/Intersector.js +1 -1
- package/views/3d/webgl-engine/lib/Renderer.js +1 -1
- package/views/3d/webgl-engine/lib/screenPolygonTriangleIntersections.js +1 -1
- package/views/3d/webgl-engine/materials/ColorMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/TriangleMaterial.js +1 -1
- package/views/3d/webgl-engine/materials/internal/worldSizedRibbonLineIntersectionUtils.js +2 -0
- package/views/layers/LineOfSightLayerView.d.ts +2 -2
- package/views/layers/ViewshedLayerView.d.ts +2 -1
- package/views/selection/SelectionOperation.js +1 -1
- package/views/selection/types.d.ts +43 -3
- package/views/support/layerViewUtils.js +1 -1
- package/views/support/screenshotUtils.js +1 -1
- package/views/support/selectionUtils.js +1 -1
- package/views/webgl/Texture.js +1 -1
- package/webdoc/support/webdocSaveUtils.js +1 -1
- package/webscene/Slide.d.ts +1 -2
- package/widgets/DirectionalPad/VisibleElements.d.ts +5 -1
- package/widgets/Feature/FeatureExpression/FeatureExpressionViewModel.js +1 -1
- package/widgets/FloorFilter/FloorFilterViewModel.js +1 -1
- package/widgets/OrientedImageryViewer/ImageMeasurementWorker.js +1 -1
- package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
- package/widgets/OrientedImageryViewer/imageMeasurementUtils.js +1 -1
- package/widgets/OrientedImageryViewer/services/ImageMeasurementService.js +1 -1
- package/widgets/Search/SearchViewModel.js +1 -1
- package/widgets/Search/support/layerSearchUtils.js +1 -1
- package/widgets/Sketch/SketchViewModel.js +1 -1
- package/widgets/Sketch/support/PluginManager.js +1 -1
- package/widgets/UtilityNetworkTrace/UtilityNetworkTraceFeature.js +1 -1
- package/widgets/UtilityNetworkValidateTopology/UtilityNetworkValidateTopologyViewModel.d.ts +3 -3
- package/widgets/UtilityNetworkValidateTopology.d.ts +1 -1
- package/widgets/support/SelectionList/GroupLayerItem.d.ts +6 -0
- package/widgets/support/SelectionList/GroupLayerItem.js +1 -1
- package/widgets/support/SelectionList/ItemBase.js +1 -1
- package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.d.ts +6 -1
- package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
- package/widgets/support/SelectionToolbar.d.ts +8 -1
- package/widgets/support/SelectionToolbar.js +1 -1
- package/widgets/support/Selector2D/selectorUtils.js +1 -1
- package/assets/esri/core/workers/chunks/0cb50bc2b2125c5fedf2.js +0 -1
- package/assets/esri/core/workers/chunks/1fe24ffcd88280d84fbe.js +0 -1
- package/assets/esri/core/workers/chunks/2f04b8679c9f15390517.js +0 -1
- package/assets/esri/core/workers/chunks/42045cf46497828cd3c0.js +0 -1
- package/assets/esri/core/workers/chunks/72071ea5de89720fbe42.js +0 -1
- package/assets/esri/core/workers/chunks/9de5ad77bc37ec142218.js +0 -1
- package/assets/esri/core/workers/chunks/c19cd5a03b6d480fe53b.js +0 -1
- package/assets/esri/core/workers/chunks/d1f98c5249c487eb96f1.js +0 -1
- package/assets/esri/core/workers/chunks/e01fc1c31bc023dd0e33.js +0 -1
- package/assets/esri/core/workers/chunks/e077e321a3109c2fbbe2.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{substitute as e}from"../../../intl/substitute.js";import{numericTypes as t}from"../../../layers/support/fieldUtils.js";import
|
|
2
|
+
import{substitute as e}from"../../../intl/substitute.js";import{numericTypes as t}from"../../../layers/support/fieldUtils.js";import n from"../../../popup/ExpressionInfo.js";import r from"../../../popup/FieldInfo.js";import i from"../../../popup/content/TextContent.js";import a from"../../../popup/support/FieldInfoFormat.js";import{getFieldAndExpressionInfos as o,getContentFromFieldInfos as s}from"./utils.js";import{getStatisticInfos as c,getClusterField as l,getPredominantTypeExpression as u,clusterCountField as d}from"../../support/clusterUtils.js";import{isClusterCompatibleRenderer as f}from"../../../views/2d/layers/support/clusterUtils.js";function p(e){let{fieldName:n,label:i,type:o}=e,s=o!=null&&t.includes(o),c=new r({fieldName:n,label:i,visible:!0,format:s?new a({places:o===`integer`||o===`small-integer`?0:2,digitSeparator:!0}):void 0});return o===`date`&&(c.format=new a({dateFormat:`short-date-short-time`})),c}function m(e,t){let n=e?t.getField(e):null;return n==null?void 0:n.alias||n.name}function h(t,n,r){let{attributeInfo:i,statisticType:a}=n,{field:o,normalizationField:s}=i,c=``,l;if(a===`avg`?l=s?r.clusters.avgNormFieldLabel:r.clusters.avgFieldLabel:a===`type`&&(l=r.clusters.predominantFieldLabel),l){let n=i.valueExpression?i.valueExpressionTitle:m(o,t),r=s&&m(s,t);c=e(l,{fieldLabel:n||``,normFieldLabel:r||``})}return c}function g(t,n,r,i){let{attributeInfo:a,statisticType:o}=n,{field:s,normalizationField:c}=a,l=``,u;if(o===`avg`?u=c?i.clusters.avgNormFieldSummary:i.clusters.avgFieldSummary:o===`type`&&(u=i.clusters.predominantFieldSummary),u){let n=a.valueExpression?a.valueExpressionTitle:m(s,t),i=c&&m(c,t);l=e(u,{fieldLabel:n||``,normFieldLabel:i||``,fieldValue:`{`+r+`}`})}return l}function _(t){return{fieldInfo:p({fieldName:d,label:t.clusters.numFeatures,type:`integer`}),fieldSummary:new i({text:e(t.clusters.countSummary,{count:`{${d}}`})})}}async function v(e,t,r){if(!f(t))return null;let a=c(e,t),o=r.clusters.predominantNoneValue,s=t.type===`unique-value`?t.uniqueValueInfos??[]:[],{fieldInfo:d,fieldSummary:m}=_(r),v=[m],y=[d],b=[];for(let t of a){let{statisticType:a,attributeInfo:c}=t,d=l(c,a),f=h(e,t,r);if(a===`avg`)v.push(new i({text:g(e,t,d,r)})),y.push(p({fieldName:d,label:f,type:`double`}));else if(a===`type`){let a=`expression/${d}`;v.push(new i({text:g(e,t,a,r)})),b.push(new n({name:d,title:f,returnType:`string`,expression:u(s,d,o)})),y.push(p({fieldName:a}))}}return{fieldInfos:y,expressionInfos:b,content:v}}async function y(e,t,n){if(!f(t))return null;let{fieldInfo:r,fieldSummary:i}=_(n),a=[i],c=[r],l=[],{fieldInfos:u,expressionInfos:d}=await o({renderer:t,layer:e,isFeatureReduction:!0}),p=await s(e,{fieldInfos:u,expressionInfos:d},!0);return a.push(...p),c.push(...u),l.push(...d),{fieldInfos:c,expressionInfos:l,content:a}}export{v as getContentAndInfos,y as getContentAndInfosForPieChart};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{unique as e}from"../../../core/arrayUtils.js";import"../../../core/has.js";import{fetchMessageBundle as t}from"../../../intl/messages.js";import{substitute as n}from"../../../intl/substitute.js";import{numericTypes as r}from"../../../layers/support/fieldUtils.js";import
|
|
2
|
+
import{unique as e}from"../../../core/arrayUtils.js";import"../../../core/has.js";import{fetchMessageBundle as t}from"../../../intl/messages.js";import{substitute as n}from"../../../intl/substitute.js";import{numericTypes as r}from"../../../layers/support/fieldUtils.js";import i from"../../../popup/ExpressionInfo.js";import a from"../../../popup/FieldInfo.js";import o from"../../../popup/content/FieldsContent.js";import s from"../../../popup/content/TextContent.js";import c from"../../../popup/support/FieldInfoFormat.js";import{getAttributes as l}from"../../../renderers/support/utils.js";import{viewScaleRE as u}from"../../../renderers/visualVariables/support/visualVariableUtils.js";import{getFeatureReductionFields as d}from"../../support/adapters/support/utils.js";let f=0;function p(e=0){}const m=`expression/`;function h(e){return!(`hasVisualVariables`in e)||!e.hasVisualVariables()?[]:e.visualVariables.filter(e=>!(u.test(e.valueExpression)||`target`in e&&e.target===`outline`))}function g(e,t){return t?d(e)?.find(e=>e.name.toLowerCase()===t.toLowerCase()):null}function _(e,t,n){let i=null;if(n&&`featureReduction`in e){let t=e.featureReduction;t&&`popupTemplate`in t&&t.popupTemplate&&(i=t.popupTemplate.fieldInfos)}else`popupTemplate`in e&&e.popupTemplate&&(i=e.popupTemplate.fieldInfos);let o=n?g(e,t):e.getField(t),s=null;if(i&&i.some(e=>e&&e.fieldName?.toLowerCase()===o?.name.toLowerCase()?(s=e.clone(),!0):!1),!s){let e=r.includes(o.type),t=o.type===`integer`||o.type===`small-integer`;s=new a({fieldName:o.name,isEditable:o.editable,visible:!0,format:e?new c({places:t?0:2,digitSeparator:!0}):void 0})}return s.label||(s.label=o.alias),s}function v(e){let{expression:t,title:n,returnType:r}=e;return new i({name:`expr${f++}`,expression:t,title:n,returnType:r})}function y(e){let t=e.returnType===`number`?new c({places:2,digitSeparator:!0}):void 0;return new a({fieldName:`${m}${e.name}`,visible:!0,format:t})}async function b(r){let i=await t(`esri/smartMapping/t9n/smartMapping`),{renderer:a,layer:o,normFieldExpressionTemplate:s,isFeatureReduction:c}=r,u=[],d=[],f=l(a,h);for(let e of f)if(e.type===`field`)u.push(_(o,e.field,c));else if(e.type===`normalized-field`){let t=c?g(o,e.field):o.getField(e.field),r=c?g(o,e.normalizationField):o.getField(e.normalizationField),a=v({expression:`
|
|
3
3
|
$feature["${t.name}"];
|
|
4
4
|
$feature["${r.name}"];
|
|
5
5
|
${s===`percentage`?`($feature["${t.name}"] / $feature["${r.name}"]) * 100;`:`$feature["${t.name}"] / $feature["${r.name}"];`}
|
|
6
|
-
`,title:n(s===`percentage`?i.normFieldLabelAsPercent:i.normFieldLabel,{expression1:t.alias,expression2:r.alias}),returnType:`number`});u.push(y(a),_(o,e.field,c),_(o,e.normalizationField,c)),d.push(a)}else if(e.type===`expression`){let t=v(e);u.push(y(t)),d.push(t)}return{fieldInfos:e(u,(e,t)=>e.fieldName===t.fieldName),expressionInfos:e(d,(e,t)=>e.expression===t.expression)}}async function x(e,r,
|
|
6
|
+
`,title:n(s===`percentage`?i.normFieldLabelAsPercent:i.normFieldLabel,{expression1:t.alias,expression2:r.alias}),returnType:`number`});u.push(y(a),_(o,e.field,c),_(o,e.normalizationField,c)),d.push(a)}else if(e.type===`expression`){let t=v(e);u.push(y(t)),d.push(t)}return{fieldInfos:e(u,(e,t)=>e.fieldName===t.fieldName),expressionInfos:e(d,(e,t)=>e.expression===t.expression)}}async function x(e,r,i){let{fieldInfos:a,expressionInfos:c}=r,l=await t(`esri/smartMapping/t9n/smartMapping`);if(a.length>2)return[new o({fieldInfos:a})];let u=[];for(let t of a){let r=t.fieldName||``,a=t.label;if(!a){let t=i?g(e,r):e.getField(r);if(t)a=t.alias||r;else if(c){let e=r.split(m)[1],t=c[c.findIndex(t=>t.name===e)];t&&(a=t.title||t.name)}}u.push(new s({text:n(l.fieldInfo,{fieldLabel:a,fieldValue:`{${r}}`})}))}return u}function S(e){return`normalizationField`in e&&e.normalizationField?!0:`hasVisualVariables`in e&&e.hasVisualVariables()&&e.visualVariables.some(e=>!!(`normalizationField`in e&&e.normalizationField))}export{m as expressionFieldPrefix,x as getContentFromFieldInfos,v as getExpressionInfo,b as getFieldAndExpressionInfos,_ as getFieldInfo,y as getFieldInfoFromExpressionInfo,h as getPrimaryVisualVariables,S as hasNormalizedField,p as resetSuffixForTests};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{createUniqueColors as e}from"../../core/colorUtils.js";import t from"../../core/Error.js";import{toPt as n}from"../../core/screenUtils.js";import{ensureClass as r}from"../../core/accessorSupport/ensureType.js";import{fetchMessageBundle as i}from"../../intl/messages.js";import a from"../../renderers/ClassBreaksRenderer.js";import o from"../../renderers/support/AuthoringInfo.js";import s from"../../renderers/support/AuthoringInfoSizeStop.js";import c from"../../renderers/support/AuthoringInfoVisualVariable.js";import{setLabelsForClassBreaks as l}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/SizeVariable.js";import{castSizeFromStringOrNumber as d}from"../../renderers/visualVariables/support/castSizeVariable.js";import f from"../../renderers/visualVariables/support/SizeStop.js";import p from"../../renderers/visualVariables/support/SizeVariableLegendOptions.js";import m from"../heuristics/ageUnit.js";import h from"../heuristics/outline.js";import g from"../heuristics/referenceSize.js";import _ from"../heuristics/sizeRange.js";import{getTypeSchemeData as v}from"./type.js";import{createPrimitiveOverrides as y,updateReferenceSizeSymbol as b,createReferenceSizeSymbol as x}from"./support/referenceSizeUtils.js";import{spliceVisualVariables as S,updateAuthoringInfoVisualVariable as C,getAuthoringInfoVisualVariable as w,isSizeVV as T,processRegenerateParams as E,getRendererToUpdate as D,getStyleType as O,hasOutlineVV as k,hasScaleDependentSizeVV as A,findSizeVVIndex as j,findOutlineVVIndex as M}from"./support/regenerateUtils.js";import{createPrimitiveOverrides as ee,updateSpikeSymbol as te,createSpikeSymbol as N,defaultSpikeSymbolStyle as P}from"./support/spikeUtils.js";import{resolveDataSeriesInfo as F}from"./support/timeSeriesUtils.js";import{errorCallback as I,getTitleAndExpressionForAgeRenderer as ne,updateAgeRendererAuthoringInfoVV as re,getClassBreaks as ie,getSummaryStatistics as ae,createSymbol as L,getSymbolOutlineFromScheme as R,getSymbolSizeFromScheme as z,verifyBasicFieldValidity as B,getSizeRangeForAxis as oe,getDataRange as se,getBasemapInfo as ce}from"./support/utils.js";import le from"../statistics/summaryStatisticsForTimeSeries.js";import{verifyDates as ue,supportedAgeUnits as de}from"../statistics/support/ageUtils.js";import{verifyBinningParams as V}from"../support/binningUtils.js";import{getNormalizationType as fe,getFieldsList as H,isAnyDateField as pe}from"../support/utils.js";import{createLayerAdapter as U,featureCapableLayerTypes as W,getLayerTypeLabels as G,binningCapableLayerTypes as K}from"../support/adapters/support/layerUtils.js";import{cloneScheme as q,getSchemes as me}from"../symbology/size.js";import{getColorFromSymbol as J}from"../../symbols/support/utils.js";const he=2**53-1,ge=[5,112.5];async function _e(e,n){let r=F({...e});if(!(r&&r.layer&&(r.field||r.valueExpression||r.sqlExpression)))throw new t(`size-visual-variable:missing-parameters`,`'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required`);if(r.valueExpression&&!r.sqlExpression&&!r.view)throw new t(`size-visual-variable:missing-parameters`,`View is required when 'valueExpression' is specified`);if(r.theme===`reference-size`&&!(r.view||r.field))throw new t(`size-visual-variable:missing-parameters`,`'view' and 'field' are required when 'theme' is 'reference-size'`);if(r.theme===`reference-size`&&r.valueExpression)throw new t(`size-visual-variable:missing-parameters`,`'valueExpression' is not supported when 'theme' is 'reference-size'`);r.forBinning&&V(r,`size-visual-variable`);let i={...r},a=r.forBinning?K:W,o=U(i.layer,a,r.forBinning);if(!o)throw new t(`size-visual-variable:invalid-parameters`,`'layer' must be one of these types: `+G(a).join(`, `));i.axis===`height`&&(i.sizeOptimizationEnabled=!1);let s=i.signal==null?null:{signal:i.signal};await o.load(s);let c=o.geometryType;if(c===`mesh`)throw new t(`size-visual-variable:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(i.worldScale){if(c===`polyline`||c===`polygon`)throw new t(`size-visual-variable:not-supported`,`'worldScale' sizing is not supported for polyline and polygon layers`);if(i.view?.type!==`3d`)throw new t(`size-visual-variable:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'worldScale' parameter is true`)}if(i.theme===`reference-size`&&!r.forBinning&&c!==`polygon`)throw new t(`size-visual-variable:invalid-parameters`,`Reference size is only supported for polygon layers`);if(i.theme===`spike`&&!r.forBinning&&c!==`polygon`&&c!==`point`)throw new t(`size-visual-variable:invalid-parameters`,`Spike is only supported for point and polygon layers`);let l=await H({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),u=B(o,l,`size-visual-variable:invalid-parameters`);if(u)throw u;i.theme===`spike`&&!i.spikeOptions?.symbolStyle&&(i.spikeOptions??={},i.spikeOptions.symbolStyle=P);let d={...i,layer:o,referenceSizeResult:n};return await ye(d),d}async function ve(e){let n=F({...e});if(!(n&&n.layer&&(n.field||n.valueExpression||n.sqlExpression)))throw new t(`size-continuous-renderer:missing-parameters`,`'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required`);if(n.valueExpression&&!n.sqlExpression&&!n.view)throw new t(`size-continuous-renderer:missing-parameters`,`View is required when 'valueExpression' is specified`);n.forBinning&&V(n,`size-continuous-renderer`);let r={...n};r.symbolType=r.symbolType||`2d`,r.defaultSymbolEnabled??=!0;let i=n.forBinning?K:W,a=U(r.layer,i,n.forBinning);if(!a)throw new t(`size-continuous-renderer:invalid-parameters`,`'layer' must be one of these types: `+G(i).join(`, `));let o=r.signal==null?null:{signal:r.signal};await a.load(o);let s=a.geometryType,c=r.symbolType.includes(`3d`);if(r.outlineOptimizationEnabled=r.theme!==`reference-size`&&r.theme!==`spike`&&s===`polygon`&&r.outlineOptimizationEnabled,s===`mesh`)throw new t(`size-continuous-renderer:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(c&&(s===`polyline`||s===`polygon`))throw new t(`size-continuous-renderer:not-supported`,`3d symbols are not supported for polyline and polygon layers`);if(r.symbolType.includes(`3d-volumetric`)&&r.view?.type!==`3d`)throw new t(`size-continuous-renderer:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform`);if(r.theme===`reference-size`&&!n.forBinning&&s!==`polygon`)throw new t(`size-continuous-renderer:invalid-parameters`,`Reference size is only supported for polygon layers`);if(r.theme===`spike`&&!n.forBinning&&s!==`polygon`&&s!==`point`)throw new t(`size-continuous-renderer:invalid-parameters`,`Spike is only supported for point and polygon layers`);let l=await H({field:r.field,normalizationField:r.normalizationField,valueExpression:r.valueExpression}),u=B(a,l,`size-continuous-renderer:invalid-parameters`);if(u)throw u;r.theme===`spike`&&!r.spikeOptions?.symbolStyle&&(r.spikeOptions??={},r.spikeOptions.symbolStyle=P);let d={...r,layer:a};return await ye(d),d}async function ye(e){let t=e.layer,n=t.geometryType,r=t.layer,i=e.forBinning&&`featureReduction`in r&&r.featureReduction?.type===`binning`;if((n===`polygon`||i)&&e.view&&e.field&&!e.valueExpression&&(!e.theme||e.theme===`reference-size`)){try{e.referenceSizeResult=e.referenceSizeResult??await g({layer:r,view:e.view,filter:e.filter,forBinning:e.forBinning,signal:e.signal})}catch{}!e.theme&&e.referenceSizeResult?.isGrid&&(e.theme=`reference-size`),e.referenceSizeOptions?.symbolStyle||(e.referenceSizeOptions?e.referenceSizeOptions.symbolStyle=`circle`:e.referenceSizeOptions={symbolStyle:`circle`})}}async function be(e){if(!e||!(e.layer&&e.view&&e.sizeStops))throw new t(`update-renderer-with-reference-size:missing-parameters`,`'layer', 'view and 'sizeStops' parameters are required`);let{view:n,forBinning:r}=e,i=e.forBinning?K:W,a=U(e.layer,i,e.forBinning);if(!a)throw new t(`update-renderer-with-reference-size:invalid-parameters`,`'layer' must be one of these types: `+G(i).join(`, `));let o=a.layer,s=e.renderer;if(!s){if(e.forBinning){if(!(`featureReduction`in o&&o.featureReduction&&`renderer`in o.featureReduction&&o.featureReduction.renderer&&(o.featureReduction.renderer.type===`class-breaks`||o.featureReduction.renderer.type===`unique-value`)))throw new t(`update-renderer-with-reference-size:invalid-parameters`,`Feature reduction renderer is not supported`);s=o.featureReduction.renderer}else{if(!(`renderer`in o&&o.renderer&&(o.renderer.type===`class-breaks`||o.renderer.type===`unique-value`)))throw new t(`update-renderer-with-reference-size:invalid-parameters`,`Renderer is not supported`);s=o.renderer}}let c=s.authoringInfo;if(!c||!c?.visualVariables?.some(e=>e.theme===`reference-size`))throw new t(`update-renderer-with-reference-size:invalid-parameters`,`'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'reference-size'`);let l=e.isGrid??(await g({view:n,layer:o,forBinning:r}))?.isGrid;return{...e,isGrid:l,renderer:s,layer:a}}async function xe(e){if(!e||!(e.layer&&e.sizeStops))throw new t(`update-renderer-with-spike:missing-parameters`,`'layer' and 'sizeStops' parameters are required`);let n=e.forBinning?K:W,r=U(e.layer,n,e.forBinning);if(!r)throw new t(`update-renderer-with-spike:invalid-parameters`,`'layer' must be one of these types: `+G(n).join(`, `));await r.load();let i=r.layer,a=e.renderer;if(!a){if(e.forBinning){if(!(`featureReduction`in i&&i.featureReduction&&`renderer`in i.featureReduction&&i.featureReduction.renderer&&(i.featureReduction.renderer.type===`class-breaks`||i.featureReduction.renderer.type===`unique-value`)))throw new t(`update-renderer-with-spike:invalid-parameters`,`Feature reduction renderer is not supported`);a=i.featureReduction.renderer}else{if(!(`renderer`in i&&i.renderer&&(i.renderer.type===`class-breaks`||i.renderer.type===`unique-value`)))throw new t(`update-renderer-with-spike:invalid-parameters`,`Renderer is not supported`);a=i.renderer}}let o=a.authoringInfo?.visualVariables.find(e=>e.theme===`spike`);if(!o)throw new t(`update-renderer-with-spike:invalid-parameters`,`'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'spike'`);let s=e.spikeOptions??{};return s.symbolStyle??=o?.spikeSymbolStyle?void 0:P,{...e,renderer:a,layer:r,spikeOptions:s}}async function Se(e){let n=F({...e});if(!(n&&n.layer&&(n.field||n.valueExpression)))throw new t(`size-class-breaks-renderer:missing-parameters`,`'layer' and 'field' or 'valueExpression' parameters are required`);if(n.valueExpression&&!n.view)throw new t(`size-class-breaks-renderer:missing-parameters`,`View is required when 'valueExpression' is specified`);n.forBinning&&V(n,`size-class-breaks-renderer`);let r={...n};r.symbolType=r.symbolType||`2d`,r.defaultSymbolEnabled??=!0,r.classificationMethod??=`equal-interval`,r.normalizationType=fe(r);let i=n.forBinning?K:W,a=U(r.layer,i,n.forBinning);if(!a)throw new t(`size-class-breaks-renderer:invalid-parameters`,`'layer' must be one of these types: `+G(i).join(`, `));if((r.minValue==null||r.maxValue==null)&&(r.minValue!=null||r.maxValue!=null))throw new t(`size-class-breaks-renderer:missing-parameters`,`Both 'minValue' and 'maxValue' are required when specifying custom data range`);let o=r.signal==null?null:{signal:r.signal};await a.load(o);let s=a.geometryType,c=r.symbolType.includes(`3d`);if(r.outlineOptimizationEnabled=s===`polygon`&&r.outlineOptimizationEnabled,s===`mesh`)throw new t(`size-class-breaks-renderer:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(c&&(s===`polyline`||s===`polygon`))throw new t(`size-class-breaks-renderer:not-supported`,`3d symbols are not supported for polyline and polygon layers`);if(r.symbolType.includes(`3d-volumetric`)&&r.view?.type!==`3d`)throw new t(`size-class-breaks-renderer:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform`);let l=await H({field:r.field,normalizationField:r.normalizationField}),u=B(a,l,`size-class-breaks-renderer:invalid-parameters`);if(u)throw u;return{...r,layer:a}}function Ce(e){let t={...e};delete t.basemap,delete t.sizeScheme,delete t.legendOptions,delete t.symbolType,delete t.defaultSymbolEnabled;let n=t;return n.analyzeData=t.minValue==null||t.maxValue==null,n}function Y(e){let t={...e},n=!!t.symbolType?.includes(`3d-volumetric`),r=t;return r.worldScale=n,n&&(r.axis=t.symbolType===`3d-volumetric-uniform`?`all`:`height`),delete t.symbolType,delete t.defaultSymbolEnabled,r}async function we(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new t(`size-age-renderer:missing-parameters`,`'layer', 'view', 'startTime', 'endTime' parameters are required`);let n={...e};n.symbolType??=`2d`,n.defaultSymbolEnabled??=!0;let r=U(n.layer,W);if(!r)throw new t(`size-age-renderer:invalid-parameters`,`'layer' must be one of these types: `+G(W).join(`, `));let i=n.signal==null?null:{signal:n.signal};await r.load(i);let a=r.geometryType,o=n.symbolType.includes(`3d`);if(n.outlineOptimizationEnabled=a===`polygon`&&n.outlineOptimizationEnabled,a===`mesh`)throw new t(`size-age-renderer:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(o&&(a===`polyline`||a===`polygon`))throw new t(`size-age-renderer:not-supported`,`3d symbols are not supported for polyline and polygon layers`);if(n.symbolType.includes(`3d-volumetric`)&&!(n.view&&n.view.type===`3d`))throw new t(`size-age-renderer:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform`);let s=ue(r,n.startTime,n.endTime,`size-age-renderer:invalid-parameters`);if(s)throw s;if(n.unit&&!de.includes(n.unit))throw new t(`size-age-renderer:invalid-unit`,`Supported units are: ${de.join(`, `)}`);return{...n,layer:r}}async function Te(e){let n=`regenerate-size-visual-variables`;E(e,n);let r=await D(e),i=O(r);if(!i||![`size-continuous`,`univariate-color-size`,`color-size`,`relationship-size`,`type-size`].includes(i))throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let a=w(r,`size`);if(!a)throw new t(`${n}:invalid-parameters`,`Renderer does not have a size visual variable authoringInfo`);let o=a.theme,s=o===`reference-size`,c=o===`spike`,l=r.visualVariables?.find(T);if(!l&&!s&&!c)throw new t(`${n}:invalid-parameters`,`Renderer does not have a size visual variable`);let u=a.field,d=a.normalizationField,f=null,p=null;u||(l?.field?(u=l.field,d=l.normalizationField):r.field?(u=r.field,d=r.normalizationField):(f=l?.valueExpression??r.valueExpression,p=l?.valueExpressionTitle??r.valueExpressionTitle));let{layer:m,forBinning:h,filter:g,view:_,signal:v}=e,y=a.dataSeriesName,b=a.dataSeriesCalculationName,x=A(r),S=await _e({layer:m,field:u,valueExpression:f,valueExpressionTitle:p,normalizationField:d,theme:o,sizeOptimizationEnabled:x,forBinning:h,dataSeriesName:y,dataSeriesCalculationName:b,filter:g,view:_,signal:v},e.referenceSizeResult);return o===`reference-size`&&a.referenceSizeScale!=null&&S.referenceSizeResult&&!S.referenceSizeResult.isGrid&&!S.sizeOptimizationEnabled&&(S.sizeOptimizationEnabled=!0),{...e,creatorParameters:S,renderer:r}}async function Ee(e){let n=`regenerate-size-continuous-renderer`;E(e,n);let r=await D(e),i=O(r);if(!i||![`size-continuous`,`univariate-color-size`].includes(i))throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let{authoringInfo:a,field:o,normalizationField:s,valueExpression:c,valueExpressionTitle:l}=r,u=a?.visualVariables.find(e=>e.type===`size`),d=u.theme,{layer:f,forBinning:p,filter:m,view:h,signal:g}=e,_=u.dataSeriesName,v=u.dataSeriesCalculationName,y=await ve({layer:f,field:o,valueExpression:c,valueExpressionTitle:l,normalizationField:s,theme:d,outlineOptimizationEnabled:k(r),sizeOptimizationEnabled:A(r),forBinning:p,dataSeriesName:_,dataSeriesCalculationName:v,filter:m,view:h,signal:g});return d===`reference-size`&&u.referenceSizeScale!=null&&y.referenceSizeResult&&!y.referenceSizeResult.isGrid&&!y.sizeOptimizationEnabled&&(y.sizeOptimizationEnabled=!0),{...e,creatorParameters:y,renderer:r}}async function De(e){let n=`regenerate-size-class-breaks-renderer`;await E(e,n);let r=await D(e);if(O(r)!==`size-class-breaks`)throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let{authoringInfo:i,field:a,normalizationField:o,normalizationType:s,normalizationTotal:c,valueExpression:l,valueExpressionTitle:u}=r,{classificationMethod:d,standardDeviationInterval:f}=i,p=r.classBreakInfos.length,{layer:m,forBinning:h,filter:g,view:_,signal:v}=e,y=i?.dataSeriesName,b=i?.dataSeriesCalculationName,x=await Se({layer:m,field:a,valueExpression:l,valueExpressionTitle:u,normalizationType:s,normalizationField:o,normalizationTotal:c,classificationMethod:d,standardDeviationInterval:f,numClasses:p,outlineOptimizationEnabled:k(r),forBinning:h,dataSeriesName:y,dataSeriesCalculationName:b,filter:g,view:_,signal:v});return{...e,creatorParameters:x,renderer:r}}async function Oe(e){let n=`regenerate-size-age-renderer`;await E(e,n);let r=await D(e);if(O(r)!==`size-age`)throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let{authoringInfo:i}=r,a=i?.visualVariables.find(e=>e.type===`size`),o=a.startTime,s=a.endTime,c=a.units,l=a.theme,{layer:u,filter:d,view:f,signal:p}=e,m=await we({layer:u,startTime:o,endTime:s,unit:c,theme:l,outlineOptimizationEnabled:k(r),sizeOptimizationEnabled:A(r),filter:d,view:f,signal:p});return{...e,creatorParameters:m,renderer:r}}async function X(e){let t=e.sizeScheme,n=null,r=null,i=await ce(e.basemap,e.view);if(n=i.basemapId==null?null:i.basemapId,r=i.basemapTheme==null?null:i.basemapTheme,t)return{scheme:q(t),basemapId:n,basemapTheme:r};let a=me({basemapTheme:r,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});return a&&(t=a.primaryScheme,n=a.basemapId,r=a.basemapTheme),{scheme:t,basemapId:n,basemapTheme:r}}function ke(e,t){switch(t){case`point`:case`multipoint`:{let t=e;return[d(t.minSize),d(t.maxSize)]}case`polyline`:{let t=e;return[d(t.minWidth),d(t.maxWidth)]}case`polygon`:{let t=e;return[d(t.marker.minSize),d(t.marker.maxSize)]}}}function Ae(e,t){e.transformationType===`clamped-linear`&&t===`below`&&e.flipSizes()}async function je(e,t,n,r,i,a){return Me(e,t,n,r)||ke(i,a)}function Me(e,t,n,r){return r===`spike`?[n?.minHeight??ge[0],n?.maxHeight??ge[1]]:r===`reference-size`&&t?[1,t.size]:e?[e.minSize,e.maxSize]:null}function Z(e,t){if(t.theme===`reference-size`&&e.min!=null&&e.max!=null&&e.avg!=null&&e.stddev!=null){let t=e.avg,n=e.min,r=e.max,i=e.stddev,a=t===0?0:i/t,o=n>0&&n<1&&r<2&&a<.5,s=n>0&&n<100&&r<200&&a<.5,c=t+2*i;return{minDataValue:o||s?0:n,maxDataValue:o?1:s?100:c,defaultValuesUsed:!1}}let{theme:n,field:r}=t,i=t.layer,a=r&&typeof r!=`function`?i.getField(r):null,o=pe(a);return se(e,n,o,n===`above`||n===`below`)}function Q(e,n){if((n===`spike`||n===`reference-size`)&&e.minDataValue!=null&&e.maxDataValue!=null&&e.minSize!=null&&e.maxSize!=null&&typeof e.minSize==`number`&&typeof e.maxSize==`number`)return[new f({value:e.minDataValue,size:e.minSize}),new f({value:e.maxDataValue,size:e.maxSize})];throw new t(`get-size-stops-for-theme`,`Invalid size variable or theme`)}async function Ne(e,n,i,a){let{theme:l,field:d,normalizationField:f,minValue:m,maxValue:h,axis:g}=e,_=e.layer.geometryType,v=await X({basemap:e.basemap,geometryType:_,sizeScheme:e.sizeScheme,worldScale:e.worldScale,view:e.view}),y=v.scheme;if(!y)throw new t(`size-visual-variable:insufficient-info`,`Unable to find size scheme`);let b=await je(i,a,e.spikeOptions,l,y,_),{minDataValue:x,maxDataValue:S,defaultValuesUsed:C}=Z(n,e),w=[],T=g===`height`,E=T?g:void 0,D=b[0],O=b[1];if(T&&typeof D==`number`&&typeof O==`number`){let e=oe({minSize:D,maxSize:O},E);w.push(new u({axis:`width-and-depth`,minSize:e.minSize})),O=e.maxSize}let k=new u({field:d??void 0,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,valueUnit:`unknown`,normalizationField:f,axis:E,minSize:D,maxSize:O,minDataValue:x,maxDataValue:S,legendOptions:r(p,e.legendOptions)});Ae(k,l),w.unshift(k);let A=l===`reference-size`?new c({type:`size`,field:e.field,normalizationField:e.normalizationField,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName,sizeStops:Q(k,l).map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),theme:l,referenceSizeScale:a?.isGrid||e.sizeOptimizationEnabled?e?.view?.scale:void 0,referenceSizeSymbolStyle:e.referenceSizeOptions?.symbolStyle,minSliderValue:m??n.min,maxSliderValue:h??n.max}):l===`spike`?new c({type:`size`,field:e.field,normalizationField:e.normalizationField,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName,spikeSymbolStyle:e.spikeOptions?.symbolStyle,sizeStops:Q(k,l).map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),theme:l,minSliderValue:m??n.min,maxSliderValue:h??n.max}):new c({type:`size`,theme:l,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName,minSliderValue:m??n.min,maxSliderValue:h??n.max}),j=new o({visualVariables:[A]});return{basemapId:v.basemapId,basemapTheme:v.basemapTheme,visualVariables:w,statistics:n,isGrid:a?.isGrid,defaultValuesUsed:C,sizeScheme:q(y),authoringInfo:j}}async function Pe(e,t,n,r,o){let s=await i(`esri/smartMapping/t9n/smartMapping`),c=o.layer,l=o.field,u=c.geometryType,d=o.defaultSymbolEnabled,f=q(e.sizeScheme),p=u===`polygon`,m=p?f.marker:f,h=p?f.background:null,g=p?`point`:u,_=t?.opacity,v=e.isGrid,b=o.theme,S=b===`reference-size`,C=b===`spike`,w=!S&&!C?e.visualVariables.map(e=>e.clone()):[];t?.visualVariables?.length&&w.push(...t.visualVariables.map(e=>e.clone()));let T=S?x({type:o.referenceSizeOptions?.symbolStyle||`circle`,color:m.color,primitiveOverrides:y({view:o.view,field:l,normalizationField:r,sizeStops:Q(e.visualVariables[0],b),sizeByScaleEnabled:v||!!o.sizeOptimizationEnabled})}):C?N({color:m.color,strokeColor:m.outline.color,baseWidth:o.spikeOptions?.baseWidth,strokeWidth:o.spikeOptions?.strokeWidth,defaultHeight:o.spikeOptions?.defaultHeight,primitiveOverrides:ee({field:l,normalizationField:r,sizeStops:Q(e.visualVariables[0],b)}),symbolStyle:o.spikeOptions?.symbolStyle}):L(g,{type:o.symbolType,color:m.color,size:z(m,g),outline:R(m,g,_)});return{renderer:new a({backgroundFillSymbol:!v&&h?L(u,{type:o.symbolType,color:h.color,outline:R(h,u,_)}):null,classBreakInfos:[{minValue:-he,maxValue:he,symbol:T}],defaultLabel:d?s.other:null,defaultSymbol:d&&!S&&!C?L(g,{type:o.symbolType,color:m.noDataColor,size:z(m,g,!0),outline:R(m,g,_)}):null,field:l,normalizationField:r,normalizationType:n,valueExpression:o.valueExpression,valueExpressionTitle:o.valueExpressionTitle,visualVariables:w,authoringInfo:e.authoringInfo?.clone()}),visualVariables:e.visualVariables.map(e=>e.clone()),statistics:e.statistics,defaultValuesUsed:e.defaultValuesUsed,isGrid:v,sizeScheme:q(e.sizeScheme),basemapId:e.basemapId,basemapTheme:e.basemapTheme}}function Fe(e,t){let r=n(e.minSize),i=(n(e.maxSize)-r)/(t>=4?t-1:t),a=[];for(let e=0;e<t;e++)a.push(r+i*e);return a}async function Ie(e,t){let n=await i(`esri/smartMapping/t9n/smartMapping`),r=e.layer,s=e.defaultSymbolEnabled,c=r.geometryType,u=c===`polygon`,d=e.symbolType?.includes(`3d-volumetric`),f=await X({basemap:e.basemap,geometryType:c,sizeScheme:e.sizeScheme,worldScale:d,view:e.view}),p=f.scheme,{result:m,outlineResult:h}=t,g=m?.classBreakInfos??[],_=e.classificationMethod,v=e.normalizationType,y=u?p.marker:p,b=u?p.background:null,x=u?`point`:c,S=ke(y,x),C=d?oe({minSize:S[0],maxSize:S[1]},`height`):null,w=Fe({minSize:S[0],maxSize:C?C.maxSize:S[1]},g.length),T=h?.opacity,E=new a({backgroundFillSymbol:b&&L(c,{type:e.symbolType,color:b.color,outline:R(b,c,T)}),classBreakInfos:g.map((t,n)=>({minValue:t.minValue,maxValue:t.maxValue,symbol:L(x,{type:e.symbolType,color:y.color,size:w[n],widthAndDepth:C?.minSize,outline:R(y,x,T)}),label:t.label})),defaultLabel:s?n.other:null,defaultSymbol:s?L(x,{type:e.symbolType,color:y.noDataColor,size:z(y,x,!0),widthAndDepth:C?.minSize,outline:R(y,x,T)}):null,field:e.field,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,normalizationType:v,normalizationField:e.normalizationField,normalizationTotal:v===`percent-of-total`?m?.normalizationTotal:void 0,legendOptions:e.legendOptions,authoringInfo:new o({type:`class-breaks-size`,classificationMethod:_,standardDeviationInterval:e.standardDeviationInterval,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName})});return _!==`standard-deviation`&&l({classBreakInfos:E.classBreakInfos,classificationMethod:_,normalizationType:v,round:!0}),h?.visualVariables?.length&&(E.visualVariables=h.visualVariables.map(e=>e.clone())),{renderer:E,sizeScheme:q(p),classBreaksResult:m,defaultValuesUsed:!!t.defaultValuesUsed,basemapId:f.basemapId,basemapTheme:f.basemapTheme}}async function $(e){let t=await _e(e),{view:n,field:r,valueExpression:i,minValue:a,maxValue:o,layer:s,normalizationField:c,signal:l,statistics:u,filter:d,dataSeriesName:f}=t,p=c?`field`:void 0,[m,h]=await Promise.all([u??(f?le({layer:s,view:n,signal:l,timeSeriesName:f,timeSeriesCalculationName:t.dataSeriesCalculationName,filter:d}):ae({layer:s,field:r,valueExpression:i,sqlExpression:t.sqlExpression,sqlWhere:t.sqlWhere,normalizationType:p,normalizationField:c,filter:d,minValue:a,maxValue:o,view:n,signal:l})),t.sizeOptimizationEnabled?_({view:n,layer:s,signal:l,filter:d}).catch(I):null]);return Ne(t,m,h,t.referenceSizeResult)}async function Le(e){let{view:t,filter:n,renderer:r,signal:i,creatorParameters:a}=await Te(e),{field:o,normalizationField:c,valueExpression:l,valueExpressionTitle:d,theme:f,layer:p,sizeOptimizationEnabled:m,spikeOptions:h,referenceSizeResult:g,dataSeriesName:v,dataSeriesCalculationName:y}=a,b=c?`field`:void 0,x=r.authoringInfo?.clone(),[S,C]=await Promise.all([(v?le({layer:p,view:t,signal:i,timeSeriesName:v,timeSeriesCalculationName:y,filter:n}):Promise.resolve(null)).then(e=>e??ae({layer:p,field:o,valueExpression:l,normalizationField:c,normalizationType:b,filter:n,view:t,signal:i})),m&&!g?_({view:t,layer:p,signal:i,filter:n}).catch(I):null]),w=Me(C,g,h,f),{minDataValue:E,maxDataValue:D}=Z(S,{theme:f,layer:p,field:o}),O=r.visualVariables?.find(T),k=(O?.stops?null:O)??new u({field:o??void 0,valueExpression:l,valueExpressionTitle:d,valueUnit:`unknown`,normalizationField:c});w&&(k.minSize=w[0],k.maxSize=w[1]),k.minDataValue=E,k.maxDataValue=D,v&&(k.valueExpression=l??null,k.valueExpressionTitle=d??null),Ae(k,f);let A=x.visualVariables.find(e=>e.type===`size`);A.dataSeriesName=v??A.dataSeriesName,A.dataSeriesCalculationName=y??A.dataSeriesCalculationName,A.minSliderValue=S.min,A.maxSliderValue=S.max;let j=f===`reference-size`;return(j||f===`spike`)&&(A.sizeStops=Q(k,f).map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),j&&(A.referenceSizeScale=g?.isGrid||m?t?.scale:void 0)),{visualVariables:f===`reference-size`||f===`spike`?[]:[k],isGrid:!!g?.isGrid,authoringInfo:x,statistics:S}}async function Re(e){let t=await ve(e),n={layer:t.layer,view:t.view,filter:t.filter,signal:t.signal},[r,i]=await Promise.all([$(Y(t)),t.outlineOptimizationEnabled?h(n).catch(I):null]),a=t.normalizationField;return Pe(r,i,a?`field`:void 0,a,t)}async function ze(e){let{renderer:t,view:n,signal:r,filter:i,creatorParameters:a,forBinning:o}=await Ee(e),{layer:s,sizeOptimizationEnabled:c,outlineOptimizationEnabled:l,theme:u,referenceSizeResult:d,valueExpression:f,valueExpressionTitle:p}=a,[m,g]=await Promise.all([Le({...e,referenceSizeResult:d}),l?h({layer:s,view:n,filter:i,signal:r}).catch(I):null]),_=u===`reference-size`,v=u===`spike`;S(t,m.visualVariables,j),S(t,g?.visualVariables,M),t.valueExpression=f??null,t.valueExpressionTitle=p??null,C(t,m.authoringInfo,`size`);let y=m.statistics;if(!_&&!v)return{renderer:t,statistics:y};if(v)return{renderer:await Ve({layer:s,renderer:t,forBinning:o,sizeStops:w(t,`size`,`spike`)?.sizeStops}),statistics:y};let b=m.isGrid;return{renderer:await Be({layer:s,renderer:t,view:n,forBinning:o,sizeOptimizationEnabled:c,sizeStops:w(t,`size`,`reference-size`)?.sizeStops,isGrid:b}),isGrid:b,statistics:y}}async function Be(n){let{layer:r,referenceSizeOptions:i,renderer:a,sizeScheme:c,sizeStops:l,typeScheme:u,view:d,isGrid:f}=await be(n),p=a.clone();p.authoringInfo??=new o;let m=p.authoringInfo.visualVariables.find(e=>e.theme===`reference-size`),h=n.field??m?.field,g=n.normalizationField??m?.normalizationField;if(!h)throw new t(`update-renderer-with-reference-size:invalid-parameters`,`'field' parameter or authoring info with 'field' is required.`);let _=y({view:d,field:h,normalizationField:g,sizeStops:l,sizeByScaleEnabled:f||!!n.sizeOptimizationEnabled}),v=i?.symbolStyle||m?.referenceSizeSymbolStyle||`circle`;if(p.type===`class-breaks`){let e=(`geometryType`in r?r.geometryType:null)===`polygon`&&c&&`marker`in c?c.marker:null;p.classBreakInfos.forEach(t=>{let n=e?.color??J(t.symbol,1);t.symbol.type===`cim`?b(t.symbol,{type:v,color:n,primitiveOverrides:_}):n&&(t.symbol=x({type:v,color:n,primitiveOverrides:_}))})}else if(p.type===`unique-value`){let t=p.uniqueValueGroups,n=(`geometryType`in r?r.geometryType:null)===`polygon`&&u&&`colors`in u?u.colors:null,i=n?e(n,p.uniqueValueInfos?.length??0):null,a=0;if(t){for(let e of t)for(let t of e.classes??[]){let e=i?i[a]:J(t.symbol,1);t.symbol?.type===`cim`?b(t.symbol,{type:v,color:e,primitiveOverrides:_}):e&&(t.symbol=x({type:v,color:e,primitiveOverrides:_})),a++}p.uniqueValueGroups=t}}return m&&(m.field=h,m.normalizationField=g,m.sizeStops=l.map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),m.referenceSizeScale=f||n.sizeOptimizationEnabled?d.scale:void 0,m.referenceSizeSymbolStyle=v),p}async function Ve(n){let{layer:r,renderer:i,sizeScheme:a,sizeStops:c,typeScheme:l,spikeOptions:u}=await xe(n),d=i.clone();d.authoringInfo??=new o;let f=d.authoringInfo.visualVariables.find(e=>e.theme===`spike`),p=n.field??f?.field,m=n.normalizationField??f?.normalizationField;if(!p)throw new t(`update-renderer-with-spike:invalid-parameters`,`'field' parameter or authoring info with 'field' is required.`);let h=ee({field:p,normalizationField:m,sizeStops:c}),g=`geometryType`in r?r.geometryType:null,_={primitiveOverrides:h,...u},y=u?.symbolStyle,b=y&&y.includes(`outline`)&&(y.includes(`solid-fill`)||y.includes(`gradient-fill`));if(d.type===`class-breaks`){if(a||b){let e=(g?await X({geometryType:g,sizeScheme:a,view:n.view}):null)?.scheme,t=g===`polygon`&&e&&`marker`in e?e.marker:e;a&&(_.color=t&&`color`in t?t?.color:void 0),b&&(_.strokeColor=t&&`outline`in t?t.outline.color:void 0)}d.classBreakInfos.forEach(e=>{if(e.symbol.type===`cim`)te(e.symbol,_);else{let t=_.color??J(e.symbol,1)??void 0;t&&(e.symbol=N({..._,color:t}))}})}else if(d.type===`unique-value`){let t=d.uniqueValueGroups,r=d.uniqueValueInfos?.length??0,i=null;if(l||b){let t=(g&&r?await v({numColors:r,geometryType:g,typeScheme:l,view:n.view}):null)?.scheme;if(l){let n=t&&`colors`in t?t.colors:null;i=n?e(n,r):null}b&&(_.strokeColor=t&&`outline`in t?t.outline.color:void 0)}let a=0;if(t){for(let e of t)for(let t of e.classes??[]){if(t.symbol?.type===`cim`)te(t.symbol,{..._,color:i?.[a]});else{let e=i?.[a]??J(t.symbol,1)??void 0;e&&(t.symbol=N({..._,color:e}))}a++}d.uniqueValueGroups=t}}return f&&(f.field=p,f.normalizationField=m,f.sizeStops=c.map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),y&&(f.spikeSymbolStyle=y)),d}async function He(e){let t=await Se(e);return Ie(t,await ie(Ce(t),t.outlineOptimizationEnabled))}async function Ue(e){let{renderer:n,creatorParameters:r}=await De(e),{outlineOptimizationEnabled:i,normalizationType:a,classificationMethod:o,valueExpression:s,valueExpressionTitle:c}=r,{result:u,outlineResult:d}=await ie(Ce(r),i),f=u.classBreakInfos;if(r.numClasses!==f.length)throw new t(`regenerate-class-breaks-renderer:invalid-parameters`,`The number of class breaks generated does not match the number of class breaks in the renderer.`);return n.classBreakInfos.forEach((e,t)=>{e.minValue=f[t].minValue,e.maxValue=f[t].maxValue,e.label=f[t].label}),n.normalizationTotal=a===`percent-of-total`?u.normalizationTotal:void 0,o!==`standard-deviation`&&l({classBreakInfos:n.classBreakInfos,classificationMethod:o,normalizationType:a,round:!0}),S(n,d?.visualVariables,M),n.valueExpression=s??null,n.valueExpressionTitle=c??null,{renderer:n}}async function We(e){let t=await we(e),{defaultSymbolEnabled:n,view:r,startTime:i,endTime:a,symbolType:o,minValue:s,maxValue:c,signal:l,filter:u,layer:d}=t,[f,p]=await Promise.all([t.unit?{unit:t.unit,statistics:null,valueExpression:null}:await m({view:r,layer:d,startTime:i,endTime:a,minValue:s,maxValue:c,signal:l,filter:u}),t.outlineOptimizationEnabled?h({layer:d,view:r,filter:u,signal:l}).catch(I):null]),{unit:g,statistics:_}=f,{valueExpression:v,title:y}=await ne(t,g),b=await Pe(await $(Y({layer:d,basemap:t.basemap,valueExpression:v,symbolType:o,statistics:_,legendOptions:{title:y},theme:t.theme,sizeScheme:t.sizeScheme,sizeOptimizationEnabled:t.sizeOptimizationEnabled,view:t.view,minValue:s,maxValue:c,filter:u,signal:l})),p,null,null,{layer:d,valueExpression:v,defaultSymbolEnabled:n,symbolType:o});return(b.renderer.authoringInfo?.visualVariables)?.forEach(e=>re(e,i,a,g)),{...b,unit:g}}async function Ge(e){let{renderer:t,creatorParameters:n}=await Oe(e),{layer:r,outlineOptimizationEnabled:i,sizeOptimizationEnabled:a,startTime:o,endTime:s,theme:c,view:l,signal:u,filter:d}=n,[f,p]=await Promise.all([m({view:l,layer:r,startTime:o,endTime:s,signal:u,filter:d}),i?h({layer:r,view:l,filter:d,signal:u}).catch(I):null]),{unit:g,statistics:_}=f,{valueExpression:v,title:y}=await ne(n,g),b=await $(Y({layer:r,valueExpression:v,statistics:_,legendOptions:{title:y},sizeOptimizationEnabled:a,theme:c,view:l,filter:d,signal:u}));return S(t,b.visualVariables,j),S(t,p?.visualVariables,M),t.authoringInfo=b.authoringInfo.clone(),(t.authoringInfo?.visualVariables)?.forEach(e=>re(e,o,s,g)),{renderer:t}}export{We as createAgeRenderer,He as createClassBreaksRenderer,Re as createContinuousRenderer,$ as createVisualVariables,Q as getSizeStopsForTheme,Ge as regenerateAgeRenderer,Ue as regenerateClassBreaksRenderer,ze as regenerateContinuousRenderer,Le as regenerateVisualVariables,Be as updateRendererWithReferenceSize,Ve as updateRendererWithSpike};
|
|
2
|
+
import{createUniqueColors as e}from"../../core/colorUtils.js";import t from"../../core/Error.js";import{toPt as n}from"../../core/screenUtils.js";import{ensureClass as r}from"../../core/accessorSupport/ensureType.js";import{fetchMessageBundle as i}from"../../intl/messages.js";import a from"../../renderers/ClassBreaksRenderer.js";import o from"../../renderers/support/AuthoringInfo.js";import s from"../../renderers/support/AuthoringInfoSizeStop.js";import c from"../../renderers/support/AuthoringInfoVisualVariable.js";import{setLabelsForClassBreaks as l}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/SizeVariable.js";import{castSizeFromStringOrNumber as d}from"../../renderers/visualVariables/support/castSizeVariable.js";import f from"../../renderers/visualVariables/support/SizeStop.js";import p from"../../renderers/visualVariables/support/SizeVariableLegendOptions.js";import m from"../heuristics/ageUnit.js";import h from"../heuristics/outline.js";import g from"../heuristics/referenceSize.js";import _ from"../heuristics/sizeRange.js";import{getTypeSchemeData as v}from"./type.js";import{createPrimitiveOverrides as y,updateReferenceSizeSymbol as b,createReferenceSizeSymbol as x}from"./support/referenceSizeUtils.js";import{spliceVisualVariables as S,updateAuthoringInfoVisualVariable as C,getAuthoringInfoVisualVariable as w,isSizeVV as T,processRegenerateParams as E,getRendererToUpdate as D,getStyleType as O,hasOutlineVV as k,hasScaleDependentSizeVV as A,findSizeVVIndex as j,findOutlineVVIndex as M}from"./support/regenerateUtils.js";import{createPrimitiveOverrides as ee,updateSpikeSymbol as te,createSpikeSymbol as N,defaultSpikeSymbolStyle as P}from"./support/spikeUtils.js";import{resolveDataSeriesInfo as F}from"./support/timeSeriesUtils.js";import{errorCallback as I,getTitleAndExpressionForAgeRenderer as ne,updateAgeRendererAuthoringInfoVV as re,getClassBreaks as ie,getSummaryStatistics as ae,createSymbol as L,getSymbolOutlineFromScheme as R,getSymbolSizeFromScheme as z,verifyBasicFieldValidity as B,getSizeRangeForAxis as oe,getDataRange as se,getBasemapInfo as ce}from"./support/utils.js";import le from"../statistics/summaryStatisticsForTimeSeries.js";import{verifyDates as ue,supportedAgeUnits as de}from"../statistics/support/ageUtils.js";import{verifyBinningParams as V}from"../support/binningUtils.js";import{getNormalizationType as fe,getFieldsList as H,isAnyDateField as pe}from"../support/utils.js";import{createLayerAdapter as U,featureCapableLayerTypes as W,getLayerTypeLabels as G,binningCapableLayerTypes as K}from"../support/adapters/support/layerUtils.js";import{cloneScheme as q,getSchemes as me}from"../symbology/size.js";import{getColorFromSymbol as J}from"../../symbols/support/utils.js";const he=2**53-1,ge=[5,112.5];async function _e(e,n){let r=F({...e});if(!(r&&r.layer&&(r.field||r.valueExpression||r.sqlExpression)))throw new t(`size-visual-variable:missing-parameters`,`'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required`);if(r.valueExpression&&!r.sqlExpression&&!r.view)throw new t(`size-visual-variable:missing-parameters`,`View is required when 'valueExpression' is specified`);if(r.theme===`reference-size`&&!(r.view||r.field))throw new t(`size-visual-variable:missing-parameters`,`'view' and 'field' are required when 'theme' is 'reference-size'`);if(r.theme===`reference-size`&&r.valueExpression)throw new t(`size-visual-variable:missing-parameters`,`'valueExpression' is not supported when 'theme' is 'reference-size'`);r.forBinning&&V(r,`size-visual-variable`);let i={...r},a=r.forBinning?K:W,o=U(i.layer,a,r.forBinning);if(!o)throw new t(`size-visual-variable:invalid-parameters`,`'layer' must be one of these types: `+G(a).join(`, `));i.axis===`height`&&(i.sizeOptimizationEnabled=!1);let s=i.signal==null?null:{signal:i.signal};await o.load(s);let c=o.geometryType;if(c===`mesh`)throw new t(`size-visual-variable:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(i.worldScale){if(c===`polyline`||c===`polygon`)throw new t(`size-visual-variable:not-supported`,`'worldScale' sizing is not supported for polyline and polygon layers`);if(i.view?.type!==`3d`)throw new t(`size-visual-variable:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'worldScale' parameter is true`)}if(i.theme===`reference-size`&&!r.forBinning&&c!==`polygon`)throw new t(`size-visual-variable:invalid-parameters`,`Reference size is only supported for polygon layers`);if(i.theme===`spike`&&!r.forBinning&&c!==`polygon`&&c!==`point`)throw new t(`size-visual-variable:invalid-parameters`,`Spike is only supported for point and polygon layers`);let l=await H({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),u=B(o,l,`size-visual-variable:invalid-parameters`);if(u)throw u;i.theme===`spike`&&!i.spikeOptions?.symbolStyle&&(i.spikeOptions??={},i.spikeOptions.symbolStyle=P);let d={...i,layer:o,referenceSizeResult:n};return await ye(d),d}async function ve(e){let n=F({...e});if(!(n&&n.layer&&(n.field||n.valueExpression||n.sqlExpression)))throw new t(`size-continuous-renderer:missing-parameters`,`'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required`);if(n.valueExpression&&!n.sqlExpression&&!n.view)throw new t(`size-continuous-renderer:missing-parameters`,`View is required when 'valueExpression' is specified`);n.forBinning&&V(n,`size-continuous-renderer`);let r={...n};r.symbolType=r.symbolType||`2d`,r.defaultSymbolEnabled??=!0;let i=n.forBinning?K:W,a=U(r.layer,i,n.forBinning);if(!a)throw new t(`size-continuous-renderer:invalid-parameters`,`'layer' must be one of these types: `+G(i).join(`, `));let o=r.signal==null?null:{signal:r.signal};await a.load(o);let s=a.geometryType,c=r.symbolType.includes(`3d`);if(r.outlineOptimizationEnabled=r.theme!==`reference-size`&&r.theme!==`spike`&&s===`polygon`&&r.outlineOptimizationEnabled,s===`mesh`)throw new t(`size-continuous-renderer:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(c&&(s===`polyline`||s===`polygon`))throw new t(`size-continuous-renderer:not-supported`,`3d symbols are not supported for polyline and polygon layers`);if(r.symbolType.includes(`3d-volumetric`)&&r.view?.type!==`3d`)throw new t(`size-continuous-renderer:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform`);if(r.theme===`reference-size`&&!n.forBinning&&s!==`polygon`)throw new t(`size-continuous-renderer:invalid-parameters`,`Reference size is only supported for polygon layers`);if(r.theme===`spike`&&!n.forBinning&&s!==`polygon`&&s!==`point`)throw new t(`size-continuous-renderer:invalid-parameters`,`Spike is only supported for point and polygon layers`);let l=await H({field:r.field,normalizationField:r.normalizationField,valueExpression:r.valueExpression}),u=B(a,l,`size-continuous-renderer:invalid-parameters`);if(u)throw u;r.theme===`spike`&&!r.spikeOptions?.symbolStyle&&(r.spikeOptions??={},r.spikeOptions.symbolStyle=P);let d={...r,layer:a};return await ye(d),d}async function ye(e){let t=e.layer,n=t.geometryType,r=t.layer,i=e.forBinning&&`featureReduction`in r&&r.featureReduction?.type===`binning`;if((n===`polygon`||i)&&e.view&&e.field&&!e.valueExpression&&(!e.theme||e.theme===`reference-size`)){try{e.referenceSizeResult=e.referenceSizeResult??await g({layer:r,view:e.view,filter:e.filter,forBinning:e.forBinning,signal:e.signal})}catch{}!e.theme&&e.referenceSizeResult?.isGrid&&(e.theme=`reference-size`),e.referenceSizeOptions?.symbolStyle||(e.referenceSizeOptions?e.referenceSizeOptions.symbolStyle=`circle`:e.referenceSizeOptions={symbolStyle:`circle`})}}async function be(e){if(!e||!(e.layer&&e.view&&e.sizeStops))throw new t(`update-renderer-with-reference-size:missing-parameters`,`'layer', 'view and 'sizeStops' parameters are required`);let{view:n,forBinning:r}=e,i=e.forBinning?K:W,a=U(e.layer,i,e.forBinning);if(!a)throw new t(`update-renderer-with-reference-size:invalid-parameters`,`'layer' must be one of these types: `+G(i).join(`, `));let o=a.layer,s=e.renderer;if(!s){if(e.forBinning){if(!(`featureReduction`in o&&o.featureReduction&&`renderer`in o.featureReduction&&o.featureReduction.renderer&&(o.featureReduction.renderer.type===`class-breaks`||o.featureReduction.renderer.type===`unique-value`)))throw new t(`update-renderer-with-reference-size:invalid-parameters`,`Feature reduction renderer is not supported`);s=o.featureReduction.renderer}else{if(!(`renderer`in o&&o.renderer&&(o.renderer.type===`class-breaks`||o.renderer.type===`unique-value`)))throw new t(`update-renderer-with-reference-size:invalid-parameters`,`Renderer is not supported`);s=o.renderer}}let c=s.authoringInfo;if(!c||!c?.visualVariables?.some(e=>e.theme===`reference-size`))throw new t(`update-renderer-with-reference-size:invalid-parameters`,`'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'reference-size'`);let l=e.isGrid??(await g({view:n,layer:o,forBinning:r}))?.isGrid;return{...e,isGrid:l,renderer:s,layer:a}}async function xe(e){if(!e||!(e.layer&&e.sizeStops))throw new t(`update-renderer-with-spike:missing-parameters`,`'layer' and 'sizeStops' parameters are required`);let n=e.forBinning?K:W,r=U(e.layer,n,e.forBinning);if(!r)throw new t(`update-renderer-with-spike:invalid-parameters`,`'layer' must be one of these types: `+G(n).join(`, `));await r.load();let i=r.layer,a=e.renderer;if(!a){if(e.forBinning){if(!(`featureReduction`in i&&i.featureReduction&&`renderer`in i.featureReduction&&i.featureReduction.renderer&&(i.featureReduction.renderer.type===`class-breaks`||i.featureReduction.renderer.type===`unique-value`)))throw new t(`update-renderer-with-spike:invalid-parameters`,`Feature reduction renderer is not supported`);a=i.featureReduction.renderer}else{if(!(`renderer`in i&&i.renderer&&(i.renderer.type===`class-breaks`||i.renderer.type===`unique-value`)))throw new t(`update-renderer-with-spike:invalid-parameters`,`Renderer is not supported`);a=i.renderer}}let o=a.authoringInfo?.visualVariables.find(e=>e.theme===`spike`);if(!o)throw new t(`update-renderer-with-spike:invalid-parameters`,`'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'spike'`);let s=e.spikeOptions??{};return s.symbolStyle??=o?.spikeSymbolStyle?void 0:P,{...e,renderer:a,layer:r,spikeOptions:s}}async function Se(e){let n=F({...e});if(!(n&&n.layer&&(n.field||n.valueExpression)))throw new t(`size-class-breaks-renderer:missing-parameters`,`'layer' and 'field' or 'valueExpression' parameters are required`);if(n.valueExpression&&!n.view)throw new t(`size-class-breaks-renderer:missing-parameters`,`View is required when 'valueExpression' is specified`);n.forBinning&&V(n,`size-class-breaks-renderer`);let r={...n};r.symbolType=r.symbolType||`2d`,r.defaultSymbolEnabled??=!0,r.classificationMethod??=`equal-interval`,r.normalizationType=fe(r);let i=n.forBinning?K:W,a=U(r.layer,i,n.forBinning);if(!a)throw new t(`size-class-breaks-renderer:invalid-parameters`,`'layer' must be one of these types: `+G(i).join(`, `));if((r.minValue==null||r.maxValue==null)&&(r.minValue!=null||r.maxValue!=null))throw new t(`size-class-breaks-renderer:missing-parameters`,`Both 'minValue' and 'maxValue' are required when specifying custom data range`);let o=r.signal==null?null:{signal:r.signal};await a.load(o);let s=a.geometryType,c=r.symbolType.includes(`3d`);if(r.outlineOptimizationEnabled=s===`polygon`&&r.outlineOptimizationEnabled,s===`mesh`)throw new t(`size-class-breaks-renderer:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(c&&(s===`polyline`||s===`polygon`))throw new t(`size-class-breaks-renderer:not-supported`,`3d symbols are not supported for polyline and polygon layers`);if(r.symbolType.includes(`3d-volumetric`)&&r.view?.type!==`3d`)throw new t(`size-class-breaks-renderer:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform`);let l=await H({field:r.field,normalizationField:r.normalizationField}),u=B(a,l,`size-class-breaks-renderer:invalid-parameters`);if(u)throw u;return{...r,layer:a}}function Ce(e){let t={...e};delete t.basemap,delete t.sizeScheme,delete t.legendOptions,delete t.symbolType,delete t.defaultSymbolEnabled;let n=t;return n.analyzeData=t.minValue==null||t.maxValue==null,n}function Y(e){let t={...e},n=!!t.symbolType?.includes(`3d-volumetric`),r=t;return r.worldScale=n,n&&(r.axis=t.symbolType===`3d-volumetric-uniform`?`all`:`height`),delete t.symbolType,delete t.defaultSymbolEnabled,r}async function we(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new t(`size-age-renderer:missing-parameters`,`'layer', 'view', 'startTime', 'endTime' parameters are required`);let n={...e};n.symbolType??=`2d`,n.defaultSymbolEnabled??=!0;let r=U(n.layer,W);if(!r)throw new t(`size-age-renderer:invalid-parameters`,`'layer' must be one of these types: `+G(W).join(`, `));let i=n.signal==null?null:{signal:n.signal};await r.load(i);let a=r.geometryType,o=n.symbolType.includes(`3d`);if(n.outlineOptimizationEnabled=a===`polygon`&&n.outlineOptimizationEnabled,a===`mesh`)throw new t(`size-age-renderer:invalid-parameters`,`Size visualization is not applicable to layers with 'mesh' geometry type`);if(o&&(a===`polyline`||a===`polygon`))throw new t(`size-age-renderer:not-supported`,`3d symbols are not supported for polyline and polygon layers`);if(n.symbolType.includes(`3d-volumetric`)&&!(n.view&&n.view.type===`3d`))throw new t(`size-age-renderer:invalid-parameters`,`'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform`);let s=ue(r,n.startTime,n.endTime,`size-age-renderer:invalid-parameters`);if(s)throw s;if(n.unit&&!de.includes(n.unit))throw new t(`size-age-renderer:invalid-unit`,`Supported units are: ${de.join(`, `)}`);return{...n,layer:r}}async function Te(e){let n=`regenerate-size-visual-variables`;E(e,n);let r=await D(e),i=O(r);if(!i||![`size-continuous`,`univariate-color-size`,`color-size`,`relationship-size`,`type-size`].includes(i))throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let a=w(r,`size`);if(!a)throw new t(`${n}:invalid-parameters`,`Renderer does not have a size visual variable authoringInfo`);let o=a.theme,s=o===`reference-size`,c=o===`spike`,l=r.visualVariables?.find(T);if(!l&&!s&&!c)throw new t(`${n}:invalid-parameters`,`Renderer does not have a size visual variable`);let u=a.field,d=a.normalizationField,f=null,p=null;u||(l?.field?(u=l.field,d=l.normalizationField):r.field?(u=r.field,d=r.normalizationField):(f=l?.valueExpression??r.valueExpression,p=l?.valueExpressionTitle??r.valueExpressionTitle));let{layer:m,forBinning:h,filter:g,view:_,signal:v}=e,y=a.dataSeriesName,b=a.dataSeriesCalculationName,x=A(r),S=await _e({layer:m,field:u,valueExpression:f,valueExpressionTitle:p,normalizationField:d,theme:o,sizeOptimizationEnabled:x,forBinning:h,dataSeriesName:y,dataSeriesCalculationName:b,filter:g,view:_,signal:v},e.referenceSizeResult);return o===`reference-size`&&a.referenceSizeScale!=null&&S.referenceSizeResult&&!S.referenceSizeResult.isGrid&&!S.sizeOptimizationEnabled&&(S.sizeOptimizationEnabled=!0),{...e,creatorParameters:S,renderer:r}}async function Ee(e){let n=`regenerate-size-continuous-renderer`;E(e,n);let r=await D(e),i=O(r);if(!i||![`size-continuous`,`univariate-color-size`].includes(i))throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let{authoringInfo:a,field:o,normalizationField:s,valueExpression:c,valueExpressionTitle:l}=r,u=a?.visualVariables.find(e=>e.type===`size`),d=u.theme,{layer:f,forBinning:p,filter:m,view:h,signal:g}=e,_=u.dataSeriesName,v=u.dataSeriesCalculationName,y=await ve({layer:f,field:o,valueExpression:c,valueExpressionTitle:l,normalizationField:s,theme:d,outlineOptimizationEnabled:k(r),sizeOptimizationEnabled:A(r),forBinning:p,dataSeriesName:_,dataSeriesCalculationName:v,filter:m,view:h,signal:g});return d===`reference-size`&&u.referenceSizeScale!=null&&y.referenceSizeResult&&!y.referenceSizeResult.isGrid&&!y.sizeOptimizationEnabled&&(y.sizeOptimizationEnabled=!0),{...e,creatorParameters:y,renderer:r}}async function De(e){let n=`regenerate-size-class-breaks-renderer`;await E(e,n);let r=await D(e);if(O(r)!==`size-class-breaks`)throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let{authoringInfo:i,field:a,normalizationField:o,normalizationType:s,normalizationTotal:c,valueExpression:l,valueExpressionTitle:u}=r,{classificationMethod:d,standardDeviationInterval:f}=i,p=r.classBreakInfos.length,m=r.classBreakInfos[0]?.symbol,h=m?.type===`point-3d`?m.symbolLayers.at(0):null,g=h?.type===`object`?`3d-volumetric`:h?`3d-flat`:`2d`,{layer:_,forBinning:v,filter:y,view:b,signal:x}=e,S=i?.dataSeriesName,C=i?.dataSeriesCalculationName,w=await Se({layer:_,symbolType:g,field:a,valueExpression:l,valueExpressionTitle:u,normalizationType:s,normalizationField:o,normalizationTotal:c,classificationMethod:d,standardDeviationInterval:f,numClasses:p,outlineOptimizationEnabled:k(r),forBinning:v,dataSeriesName:S,dataSeriesCalculationName:C,filter:y,view:b,signal:x});return{...e,creatorParameters:w,renderer:r}}async function Oe(e){let n=`regenerate-size-age-renderer`;await E(e,n);let r=await D(e);if(O(r)!==`size-age`)throw new t(`${n}:invalid-parameters`,`Renderer is invalid`);let{authoringInfo:i}=r,a=i?.visualVariables.find(e=>e.type===`size`),o=a.startTime,s=a.endTime,c=a.units,l=a.theme,{layer:u,filter:d,view:f,signal:p}=e,m=await we({layer:u,startTime:o,endTime:s,unit:c,theme:l,outlineOptimizationEnabled:k(r),sizeOptimizationEnabled:A(r),filter:d,view:f,signal:p});return{...e,creatorParameters:m,renderer:r}}async function X(e){let t=e.sizeScheme,n=null,r=null,i=await ce(e.basemap,e.view);if(n=i.basemapId==null?null:i.basemapId,r=i.basemapTheme==null?null:i.basemapTheme,t)return{scheme:q(t),basemapId:n,basemapTheme:r};let a=me({basemapTheme:r,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});return a&&(t=a.primaryScheme,n=a.basemapId,r=a.basemapTheme),{scheme:t,basemapId:n,basemapTheme:r}}function ke(e,t){switch(t){case`point`:case`multipoint`:{let t=e;return[d(t.minSize),d(t.maxSize)]}case`polyline`:{let t=e;return[d(t.minWidth),d(t.maxWidth)]}case`polygon`:{let t=e;return[d(t.marker.minSize),d(t.marker.maxSize)]}}}function Ae(e,t){e.transformationType===`clamped-linear`&&t===`below`&&e.flipSizes()}async function je(e,t,n,r,i,a){return Me(e,t,n,r)||ke(i,a)}function Me(e,t,n,r){return r===`spike`?[n?.minHeight??ge[0],n?.maxHeight??ge[1]]:r===`reference-size`&&t?[1,t.size]:e?[e.minSize,e.maxSize]:null}function Z(e,t){if(t.theme===`reference-size`&&e.min!=null&&e.max!=null&&e.avg!=null&&e.stddev!=null){let t=e.avg,n=e.min,r=e.max,i=e.stddev,a=t===0?0:i/t,o=n>0&&n<1&&r<2&&a<.5,s=n>0&&n<100&&r<200&&a<.5,c=t+2*i;return{minDataValue:o||s?0:n,maxDataValue:o?1:s?100:c,defaultValuesUsed:!1}}let{theme:n,field:r}=t,i=t.layer,a=r&&typeof r!=`function`?i.getField(r):null,o=pe(a);return se(e,n,o,n===`above`||n===`below`)}function Q(e,n){if((n===`spike`||n===`reference-size`)&&e.minDataValue!=null&&e.maxDataValue!=null&&e.minSize!=null&&e.maxSize!=null&&typeof e.minSize==`number`&&typeof e.maxSize==`number`)return[new f({value:e.minDataValue,size:e.minSize}),new f({value:e.maxDataValue,size:e.maxSize})];throw new t(`get-size-stops-for-theme`,`Invalid size variable or theme`)}async function Ne(e,n,i,a){let{theme:l,field:d,normalizationField:f,minValue:m,maxValue:h,axis:g}=e,_=e.layer.geometryType,v=await X({basemap:e.basemap,geometryType:_,sizeScheme:e.sizeScheme,worldScale:e.worldScale,view:e.view}),y=v.scheme;if(!y)throw new t(`size-visual-variable:insufficient-info`,`Unable to find size scheme`);let b=await je(i,a,e.spikeOptions,l,y,_),{minDataValue:x,maxDataValue:S,defaultValuesUsed:C}=Z(n,e),w=[],T=g===`height`,E=T?g:void 0,D=b[0],O=b[1];if(T&&typeof D==`number`&&typeof O==`number`){let e=oe({minSize:D,maxSize:O},E);w.push(new u({axis:`width-and-depth`,minSize:e.minSize})),O=e.maxSize}let k=new u({field:d??void 0,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,valueUnit:`unknown`,normalizationField:f,axis:E,minSize:D,maxSize:O,minDataValue:x,maxDataValue:S,legendOptions:r(p,e.legendOptions)});Ae(k,l),w.unshift(k);let A=l===`reference-size`?new c({type:`size`,field:e.field,normalizationField:e.normalizationField,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName,sizeStops:Q(k,l).map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),theme:l,referenceSizeScale:a?.isGrid||e.sizeOptimizationEnabled?e?.view?.scale:void 0,referenceSizeSymbolStyle:e.referenceSizeOptions?.symbolStyle,minSliderValue:m??n.min,maxSliderValue:h??n.max}):l===`spike`?new c({type:`size`,field:e.field,normalizationField:e.normalizationField,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName,spikeSymbolStyle:e.spikeOptions?.symbolStyle,sizeStops:Q(k,l).map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),theme:l,minSliderValue:m??n.min,maxSliderValue:h??n.max}):new c({type:`size`,theme:l,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName,minSliderValue:m??n.min,maxSliderValue:h??n.max}),j=new o({visualVariables:[A]});return{basemapId:v.basemapId,basemapTheme:v.basemapTheme,visualVariables:w,statistics:n,isGrid:a?.isGrid,defaultValuesUsed:C,sizeScheme:q(y),authoringInfo:j}}async function Pe(e,t,n,r,o){let s=await i(`esri/smartMapping/t9n/smartMapping`),c=o.layer,l=o.field,u=c.geometryType,d=o.defaultSymbolEnabled,f=q(e.sizeScheme),p=u===`polygon`,m=p?f.marker:f,h=p?f.background:null,g=p?`point`:u,_=t?.opacity,v=e.isGrid,b=o.theme,S=b===`reference-size`,C=b===`spike`,w=!S&&!C?e.visualVariables.map(e=>e.clone()):[];t?.visualVariables?.length&&w.push(...t.visualVariables.map(e=>e.clone()));let T=S?x({type:o.referenceSizeOptions?.symbolStyle||`circle`,color:m.color,primitiveOverrides:y({view:o.view,field:l,normalizationField:r,sizeStops:Q(e.visualVariables[0],b),sizeByScaleEnabled:v||!!o.sizeOptimizationEnabled})}):C?N({color:m.color,strokeColor:m.outline.color,baseWidth:o.spikeOptions?.baseWidth,strokeWidth:o.spikeOptions?.strokeWidth,defaultHeight:o.spikeOptions?.defaultHeight,primitiveOverrides:ee({field:l,normalizationField:r,sizeStops:Q(e.visualVariables[0],b)}),symbolStyle:o.spikeOptions?.symbolStyle}):L(g,{type:o.symbolType,color:m.color,size:z(m,g),outline:R(m,g,_)});return{renderer:new a({backgroundFillSymbol:!v&&h?L(u,{type:o.symbolType,color:h.color,outline:R(h,u,_)}):null,classBreakInfos:[{minValue:-he,maxValue:he,symbol:T}],defaultLabel:d?s.other:null,defaultSymbol:d&&!S&&!C?L(g,{type:o.symbolType,color:m.noDataColor,size:z(m,g,!0),outline:R(m,g,_)}):null,field:l,normalizationField:r,normalizationType:n,valueExpression:o.valueExpression,valueExpressionTitle:o.valueExpressionTitle,visualVariables:w,authoringInfo:e.authoringInfo?.clone()}),visualVariables:e.visualVariables.map(e=>e.clone()),statistics:e.statistics,defaultValuesUsed:e.defaultValuesUsed,isGrid:v,sizeScheme:q(e.sizeScheme),basemapId:e.basemapId,basemapTheme:e.basemapTheme}}function Fe(e,t){let r=n(e.minSize),i=(n(e.maxSize)-r)/(t>=4?t-1:t),a=[];for(let e=0;e<t;e++)a.push(r+i*e);return a}async function Ie(e,t){let n=await i(`esri/smartMapping/t9n/smartMapping`),r=e.layer,s=e.defaultSymbolEnabled,c=r.geometryType,u=c===`polygon`,d=e.symbolType?.includes(`3d-volumetric`),f=await X({basemap:e.basemap,geometryType:c,sizeScheme:e.sizeScheme,worldScale:d,view:e.view}),p=f.scheme,{result:m,outlineResult:h}=t,g=m?.classBreakInfos??[],_=e.classificationMethod,v=e.normalizationType,y=u?p.marker:p,b=u?p.background:null,x=u?`point`:c,S=ke(y,x),C=d?oe({minSize:S[0],maxSize:S[1]},`height`):null,w=Fe({minSize:S[0],maxSize:C?C.maxSize:S[1]},g.length),T=h?.opacity,E=new a({backgroundFillSymbol:b&&L(c,{type:e.symbolType,color:b.color,outline:R(b,c,T)}),classBreakInfos:g.map((t,n)=>({minValue:t.minValue,maxValue:t.maxValue,symbol:L(x,{type:e.symbolType,color:y.color,size:w[n],widthAndDepth:C?.minSize,outline:R(y,x,T)}),label:t.label})),defaultLabel:s?n.other:null,defaultSymbol:s?L(x,{type:e.symbolType,color:y.noDataColor,size:z(y,x,!0),widthAndDepth:C?.minSize,outline:R(y,x,T)}):null,field:e.field,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,normalizationType:v,normalizationField:e.normalizationField,normalizationTotal:v===`percent-of-total`?m?.normalizationTotal:void 0,legendOptions:e.legendOptions,authoringInfo:new o({type:`class-breaks-size`,classificationMethod:_,standardDeviationInterval:e.standardDeviationInterval,dataSeriesName:e.dataSeriesName,dataSeriesCalculationName:e.dataSeriesCalculationName})});return _!==`standard-deviation`&&l({classBreakInfos:E.classBreakInfos,classificationMethod:_,normalizationType:v,round:!0}),h?.visualVariables?.length&&(E.visualVariables=h.visualVariables.map(e=>e.clone())),{renderer:E,sizeScheme:q(p),classBreaksResult:m,defaultValuesUsed:!!t.defaultValuesUsed,basemapId:f.basemapId,basemapTheme:f.basemapTheme}}async function $(e){let t=await _e(e),{view:n,field:r,valueExpression:i,minValue:a,maxValue:o,layer:s,normalizationField:c,signal:l,statistics:u,filter:d,dataSeriesName:f}=t,p=c?`field`:void 0,[m,h]=await Promise.all([u??(f?le({layer:s,view:n,signal:l,timeSeriesName:f,timeSeriesCalculationName:t.dataSeriesCalculationName,filter:d}):ae({layer:s,field:r,valueExpression:i,sqlExpression:t.sqlExpression,sqlWhere:t.sqlWhere,normalizationType:p,normalizationField:c,filter:d,minValue:a,maxValue:o,view:n,signal:l})),t.sizeOptimizationEnabled?_({view:n,layer:s,signal:l,filter:d}).catch(I):null]);return Ne(t,m,h,t.referenceSizeResult)}async function Le(e){let{view:t,filter:n,renderer:r,signal:i,creatorParameters:a}=await Te(e),{field:o,normalizationField:c,valueExpression:l,valueExpressionTitle:d,theme:f,layer:p,sizeOptimizationEnabled:m,spikeOptions:h,referenceSizeResult:g,dataSeriesName:v,dataSeriesCalculationName:y}=a,b=c?`field`:void 0,x=r.authoringInfo?.clone(),[S,C]=await Promise.all([(v?le({layer:p,view:t,signal:i,timeSeriesName:v,timeSeriesCalculationName:y,filter:n}):Promise.resolve(null)).then(e=>e??ae({layer:p,field:o,valueExpression:l,normalizationField:c,normalizationType:b,filter:n,view:t,signal:i})),m&&!g?_({view:t,layer:p,signal:i,filter:n}).catch(I):null]),w=Me(C,g,h,f),{minDataValue:E,maxDataValue:D}=Z(S,{theme:f,layer:p,field:o}),O=r.visualVariables?.find(T),k=(O?.stops?null:O)??new u({field:o??void 0,valueExpression:l,valueExpressionTitle:d,valueUnit:`unknown`,normalizationField:c});w&&(k.minSize=w[0],k.maxSize=w[1]),k.minDataValue=E,k.maxDataValue=D,v&&(k.valueExpression=l??null,k.valueExpressionTitle=d??null),Ae(k,f);let A=x.visualVariables.find(e=>e.type===`size`);A.dataSeriesName=v??A.dataSeriesName,A.dataSeriesCalculationName=y??A.dataSeriesCalculationName,A.minSliderValue=S.min,A.maxSliderValue=S.max;let j=f===`reference-size`;return(j||f===`spike`)&&(A.sizeStops=Q(k,f).map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),j&&(A.referenceSizeScale=g?.isGrid||m?t?.scale:void 0)),{visualVariables:f===`reference-size`||f===`spike`?[]:[k],isGrid:!!g?.isGrid,authoringInfo:x,statistics:S}}async function Re(e){let t=await ve(e),n={layer:t.layer,view:t.view,filter:t.filter,signal:t.signal},[r,i]=await Promise.all([$(Y(t)),t.outlineOptimizationEnabled?h(n).catch(I):null]),a=t.normalizationField;return Pe(r,i,a?`field`:void 0,a,t)}async function ze(e){let{renderer:t,view:n,signal:r,filter:i,creatorParameters:a,forBinning:o}=await Ee(e),{layer:s,sizeOptimizationEnabled:c,outlineOptimizationEnabled:l,theme:u,referenceSizeResult:d,valueExpression:f,valueExpressionTitle:p}=a,[m,g]=await Promise.all([Le({...e,referenceSizeResult:d}),l?h({layer:s,view:n,filter:i,signal:r}).catch(I):null]),_=u===`reference-size`,v=u===`spike`;S(t,m.visualVariables,j),S(t,g?.visualVariables,M),t.valueExpression=f??null,t.valueExpressionTitle=p??null,C(t,m.authoringInfo,`size`);let y=m.statistics;if(!_&&!v)return{renderer:t,statistics:y};if(v)return{renderer:await Ve({layer:s,renderer:t,forBinning:o,sizeStops:w(t,`size`,`spike`)?.sizeStops}),statistics:y};let b=m.isGrid;return{renderer:await Be({layer:s,renderer:t,view:n,forBinning:o,sizeOptimizationEnabled:c,sizeStops:w(t,`size`,`reference-size`)?.sizeStops,isGrid:b}),isGrid:b,statistics:y}}async function Be(n){let{layer:r,referenceSizeOptions:i,renderer:a,sizeScheme:c,sizeStops:l,typeScheme:u,view:d,isGrid:f}=await be(n),p=a.clone();p.authoringInfo??=new o;let m=p.authoringInfo.visualVariables.find(e=>e.theme===`reference-size`),h=n.field??m?.field,g=n.normalizationField??m?.normalizationField;if(!h)throw new t(`update-renderer-with-reference-size:invalid-parameters`,`'field' parameter or authoring info with 'field' is required.`);let _=y({view:d,field:h,normalizationField:g,sizeStops:l,sizeByScaleEnabled:f||!!n.sizeOptimizationEnabled}),v=i?.symbolStyle||m?.referenceSizeSymbolStyle||`circle`;if(p.type===`class-breaks`){let e=(`geometryType`in r?r.geometryType:null)===`polygon`&&c&&`marker`in c?c.marker:null;p.classBreakInfos.forEach(t=>{let n=e?.color??J(t.symbol,1);t.symbol.type===`cim`?b(t.symbol,{type:v,color:n,primitiveOverrides:_}):n&&(t.symbol=x({type:v,color:n,primitiveOverrides:_}))})}else if(p.type===`unique-value`){let t=p.uniqueValueGroups,n=(`geometryType`in r?r.geometryType:null)===`polygon`&&u&&`colors`in u?u.colors:null,i=n?e(n,p.uniqueValueInfos?.length??0):null,a=0;if(t){for(let e of t)for(let t of e.classes??[]){let e=i?i[a]:J(t.symbol,1);t.symbol?.type===`cim`?b(t.symbol,{type:v,color:e,primitiveOverrides:_}):e&&(t.symbol=x({type:v,color:e,primitiveOverrides:_})),a++}p.uniqueValueGroups=t}}return m&&(m.field=h,m.normalizationField=g,m.sizeStops=l.map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),m.referenceSizeScale=f||n.sizeOptimizationEnabled?d.scale:void 0,m.referenceSizeSymbolStyle=v),p}async function Ve(n){let{layer:r,renderer:i,sizeScheme:a,sizeStops:c,typeScheme:l,spikeOptions:u}=await xe(n),d=i.clone();d.authoringInfo??=new o;let f=d.authoringInfo.visualVariables.find(e=>e.theme===`spike`),p=n.field??f?.field,m=n.normalizationField??f?.normalizationField;if(!p)throw new t(`update-renderer-with-spike:invalid-parameters`,`'field' parameter or authoring info with 'field' is required.`);let h=ee({field:p,normalizationField:m,sizeStops:c}),g=`geometryType`in r?r.geometryType:null,_={primitiveOverrides:h,...u},y=u?.symbolStyle,b=y&&y.includes(`outline`)&&(y.includes(`solid-fill`)||y.includes(`gradient-fill`));if(d.type===`class-breaks`){if(a||b){let e=(g?await X({geometryType:g,sizeScheme:a,view:n.view}):null)?.scheme,t=g===`polygon`&&e&&`marker`in e?e.marker:e;a&&(_.color=t&&`color`in t?t?.color:void 0),b&&(_.strokeColor=t&&`outline`in t?t.outline.color:void 0)}d.classBreakInfos.forEach(e=>{if(e.symbol.type===`cim`)te(e.symbol,_);else{let t=_.color??J(e.symbol,1)??void 0;t&&(e.symbol=N({..._,color:t}))}})}else if(d.type===`unique-value`){let t=d.uniqueValueGroups,r=d.uniqueValueInfos?.length??0,i=null;if(l||b){let t=(g&&r?await v({numColors:r,geometryType:g,typeScheme:l,view:n.view}):null)?.scheme;if(l){let n=t&&`colors`in t?t.colors:null;i=n?e(n,r):null}b&&(_.strokeColor=t&&`outline`in t?t.outline.color:void 0)}let a=0;if(t){for(let e of t)for(let t of e.classes??[]){if(t.symbol?.type===`cim`)te(t.symbol,{..._,color:i?.[a]});else{let e=i?.[a]??J(t.symbol,1)??void 0;e&&(t.symbol=N({..._,color:e}))}a++}d.uniqueValueGroups=t}}return f&&(f.field=p,f.normalizationField=m,f.sizeStops=c.map(({label:e,size:t,value:n})=>new s({label:e,size:t,value:n})),y&&(f.spikeSymbolStyle=y)),d}async function He(e){let t=await Se(e);return Ie(t,await ie(Ce(t),t.outlineOptimizationEnabled))}async function Ue(e){let{renderer:t,creatorParameters:n}=await De(e),{outlineOptimizationEnabled:r,normalizationType:i,classificationMethod:a,valueExpression:o,valueExpressionTitle:s}=n;if(a===`manual`)return{renderer:t};let c=await ie(Ce(n),r),{result:u,outlineResult:d}=c,f=u.classBreakInfos;if(n.numClasses!==f.length){let{renderer:e}=await Ie(n,c);t.classBreakInfos=e.classBreakInfos}else t.classBreakInfos.forEach((e,t)=>{e.minValue=f[t].minValue,e.maxValue=f[t].maxValue,e.label=f[t].label}),a!==`standard-deviation`&&l({classBreakInfos:t.classBreakInfos,classificationMethod:a,normalizationType:i,round:!0});return t.normalizationTotal=i===`percent-of-total`?u.normalizationTotal:void 0,S(t,d?.visualVariables,M),t.valueExpression=o??null,t.valueExpressionTitle=s??null,{renderer:t}}async function We(e){let t=await we(e),{defaultSymbolEnabled:n,view:r,startTime:i,endTime:a,symbolType:o,minValue:s,maxValue:c,signal:l,filter:u,layer:d}=t,[f,p]=await Promise.all([t.unit?{unit:t.unit,statistics:null,valueExpression:null}:await m({view:r,layer:d,startTime:i,endTime:a,minValue:s,maxValue:c,signal:l,filter:u}),t.outlineOptimizationEnabled?h({layer:d,view:r,filter:u,signal:l}).catch(I):null]),{unit:g,statistics:_}=f,{valueExpression:v,title:y}=await ne(t,g),b=await Pe(await $(Y({layer:d,basemap:t.basemap,valueExpression:v,symbolType:o,statistics:_,legendOptions:{title:y},theme:t.theme,sizeScheme:t.sizeScheme,sizeOptimizationEnabled:t.sizeOptimizationEnabled,view:t.view,minValue:s,maxValue:c,filter:u,signal:l})),p,null,null,{layer:d,valueExpression:v,defaultSymbolEnabled:n,symbolType:o});return(b.renderer.authoringInfo?.visualVariables)?.forEach(e=>re(e,i,a,g)),{...b,unit:g}}async function Ge(e){let{renderer:t,creatorParameters:n}=await Oe(e),{layer:r,outlineOptimizationEnabled:i,sizeOptimizationEnabled:a,startTime:o,endTime:s,theme:c,view:l,signal:u,filter:d}=n,[f,p]=await Promise.all([m({view:l,layer:r,startTime:o,endTime:s,signal:u,filter:d}),i?h({layer:r,view:l,filter:d,signal:u}).catch(I):null]),{unit:g,statistics:_}=f,{valueExpression:v,title:y}=await ne(n,g),b=await $(Y({layer:r,valueExpression:v,statistics:_,legendOptions:{title:y},sizeOptimizationEnabled:a,theme:c,view:l,filter:d,signal:u}));return S(t,b.visualVariables,j),S(t,p?.visualVariables,M),t.authoringInfo=b.authoringInfo.clone(),(t.authoringInfo?.visualVariables)?.forEach(e=>re(e,o,s,g)),{renderer:t}}export{We as createAgeRenderer,He as createClassBreaksRenderer,Re as createContinuousRenderer,$ as createVisualVariables,Q as getSizeStopsForTheme,Ge as regenerateAgeRenderer,Ue as regenerateClassBreaksRenderer,ze as regenerateContinuousRenderer,Le as regenerateVisualVariables,Be as updateRendererWithReferenceSize,Ve as updateRendererWithSpike};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import e from"../../../core/Error.js";async function t(t,n){let{layer:r,view:i,forBinning:a,filter:o}=t;if(!r||!i)throw new e(`${n}:missing-parameters`,`'layer' and 'view' parameters are required`);await r.load();let s=`featureReduction`in r?r.featureReduction:null;if(a){if(s?.type!==`binning`)throw new e(`${n}:invalid-parameters`,`'layer' must have 'featureReduction' property defined with 'binning' type when 'forBinning' parameter is true`);if(o)throw new e(`${n}:invalid-parameters`,`'filter' parameter is not supported when 'forBinning' parameter is true`)}return t}async function n(t){let{layer:n,forBinning:r,renderer:i}=t;await n.load();let a=`featureReduction`in n?n.featureReduction:null,o=i?.clone()??(r&&a?.type===`binning`?a?.renderer?.clone():`renderer`in n?n.renderer?.clone():null);if(!o)throw new e(`get-renderer-to-update:invalid-parameters`,`renderer not available`);return o}function r(e,t,n){return(e?.authoringInfo?.visualVariables)?.find(e=>n===`reference-size`?e.type===t&&e.theme===`reference-size`:n===`spike`?e.type===t&&e.theme===`spike`:e.type===t)}function i(e){if(!e)return null;let t=e.type,n=`visualVariables`in e?e.visualVariables:null,i=n?.find(p),a=n?.find(g),o=e.authoringInfo,s=r(e,`color`),c=r(e,`size`),l=r(e,`size`,`reference-size`),u=r(e,`size`,`spike`);if(t===`class-breaks`){if(o?.type===`univariate-color-size`)return`univariate-color-size`;if(i)return a?c?.units?`color-size-age`:s?.units?`color-age-size`:`color-size`:s?.units?`color-age`:l||u?`color-size`:`color-continuous`;if(a)return c?.units?`size-age`:`size-continuous`;if(e.classBreakInfos.length>1)return
|
|
2
|
+
import e from"../../../core/Error.js";async function t(t,n){let{layer:r,view:i,forBinning:a,filter:o}=t;if(!r||!i)throw new e(`${n}:missing-parameters`,`'layer' and 'view' parameters are required`);await r.load();let s=`featureReduction`in r?r.featureReduction:null;if(a){if(s?.type!==`binning`)throw new e(`${n}:invalid-parameters`,`'layer' must have 'featureReduction' property defined with 'binning' type when 'forBinning' parameter is true`);if(o)throw new e(`${n}:invalid-parameters`,`'filter' parameter is not supported when 'forBinning' parameter is true`)}return t}async function n(t){let{layer:n,forBinning:r,renderer:i}=t;await n.load();let a=`featureReduction`in n?n.featureReduction:null,o=i?.clone()??(r&&a?.type===`binning`?a?.renderer?.clone():`renderer`in n?n.renderer?.clone():null);if(!o)throw new e(`get-renderer-to-update:invalid-parameters`,`renderer not available`);return o}function r(e,t,n){return(e?.authoringInfo?.visualVariables)?.find(e=>n===`reference-size`?e.type===t&&e.theme===`reference-size`:n===`spike`?e.type===t&&e.theme===`spike`:e.type===t)}function i(e){if(!e)return null;let t=e.type,n=`visualVariables`in e?e.visualVariables:null,i=n?.find(p),a=n?.find(g),o=e.authoringInfo,s=r(e,`color`),c=r(e,`size`),l=r(e,`size`,`reference-size`),u=r(e,`size`,`spike`);if(t===`class-breaks`){if(o?.type===`univariate-color-size`)return`univariate-color-size`;if(o?.type===`class-breaks-color`)return`color-class-breaks`;if(o?.type===`class-breaks-size`)return`size-class-breaks`;if(i)return a?c?.units?`color-size-age`:s?.units?`color-age-size`:`color-size`:s?.units?`color-age`:l||u?`color-size`:`color-continuous`;if(a)return c?.units?`size-age`:`size-continuous`;if(e.classBreakInfos.length>1)return null;if(l||u)return`size-continuous`}return t===`unique-value`?e.valueExpression?o?.type===`predominance`?`predominance`:o?.type===`relationship`?a||l||u?`relationship-size`:`relationship`:a||l||u?`type-size`:`type`:a?c?.units?`type-size-age`:`type-size`:l||u?`type-size`:`type`:t===`pie-chart`?`pie-chart`:t===`dot-density`?`dot-density`:t===`heatmap`?`heatmap`:t===`simple`?`location`:null}function a(e){return!!e.visualVariables?.some(_)}function o(e){return!!e.visualVariables?.some(v)}function s(e){return e?.findIndex(_)??-1}function c(e){return e?.findIndex(g)??-1}function l(e){return e?.findIndex(p)??-1}function u(e){return e?.findIndex(m)??-1}function d(e){return e?.findIndex(h)??-1}function f(e){return e?.findIndex(v)??-1}function p(e){return e.type===`color`}function m(e){return e.type===`opacity`}function h(e){return e.type===`rotation`}function g(e){return e.type===`size`&&e.target!==`outline`&&e.valueExpression!==`$view.scale`}function _(e){return e.type===`size`&&e.target===`outline`}function v(e){return e.type===`size`&&e.valueExpression===`$view.scale`&&e.target!==`outline`&&Array.isArray(e.stops)}function y(e,t,n){let r=e.visualVariables,i=n(r);if(!t||Array.isArray(t)&&!t.length)return;Array.isArray(t)||(t=[t]);let a=t.map(e=>e.clone());r?i>-1?r.splice(i,1,...a):r.push(...a):e.visualVariables=a}function b(e,t,n){let i=t?.visualVariables.find(e=>e.type===n),a=r(e,n);a&&i&&(a.dataSeriesName=i.dataSeriesName,a.dataSeriesCalculationName=i.dataSeriesCalculationName,a.minSliderValue=i.minSliderValue,a.maxSliderValue=i.maxSliderValue,n===`size`&&(a.theme===`reference-size`||a.theme===`spike`)&&(a.sizeStops=i.sizeStops?.map(e=>e.clone()),a.theme===`reference-size`&&(a.referenceSizeScale=i.referenceSizeScale)))}export{l as findColorVVIndex,u as findOpacityVVIndex,s as findOutlineVVIndex,d as findRotationVVIndex,f as findScaleDependentSizeVVIndex,c as findSizeVVIndex,r as getAuthoringInfoVisualVariable,n as getRendererToUpdate,i as getStyleType,a as hasOutlineVV,o as hasScaleDependentSizeVV,p as isColorVV,m as isOpacityVV,_ as isOutlineVV,h as isRotationVV,v as isScaleDependentSizeVV,g as isSizeVV,t as processRegenerateParams,y as spliceVisualVariables,b as updateAuthoringInfoVisualVariable};
|
package/support/timeUtils.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ import type { TimeSliderSettings } from "../widgets/TimeSlider/types.js";
|
|
|
26
26
|
* If canceled, the promise will be rejected with an error named `AbortError`.
|
|
27
27
|
* See also [AbortController](https://developer.mozilla.org/docs/Web/API/AbortController).
|
|
28
28
|
* @returns Returns a promise that resolves to a [TimeExtent](https://developers.arcgis.com/javascript/latest/references/core/time/TimeExtent/).
|
|
29
|
+
* @see [FeatureLayer.timeInfo](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#timeInfo)
|
|
29
30
|
* @example
|
|
30
31
|
* // Get the time extent of all layers in the view.
|
|
31
32
|
* const fullTimeExtent = await getTimeExtentFromLayers(view.map.allLayers);
|
|
@@ -35,6 +36,16 @@ import type { TimeSliderSettings } from "../widgets/TimeSlider/types.js";
|
|
|
35
36
|
* earthquakes,
|
|
36
37
|
* emergencyCalls
|
|
37
38
|
* ]);
|
|
39
|
+
* @example
|
|
40
|
+
* // update layer's timeInfo at runtime
|
|
41
|
+
* featureLayer.timeInfo = {
|
|
42
|
+
* startField: "DateField",
|
|
43
|
+
* timeZone: "UTC"
|
|
44
|
+
* };
|
|
45
|
+
*
|
|
46
|
+
* // calculate the fullTimeExtent based on startField
|
|
47
|
+
* const fullTimeExtent = getTimeExtentFromLayers([featureLayer]);
|
|
48
|
+
* featureLayer.timeInfo.fullTimeExtent = fullTimeExtent;
|
|
38
49
|
*/
|
|
39
50
|
export function getTimeExtentFromLayers(layers: ReadonlyArrayOrCollection<Layer>, signal?: AbortSignal | null | undefined): Promise<TimeExtent>;
|
|
40
51
|
|
package/symbols/cim/CIMCursor.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{Placement as e}from"./CIMPlacements.js";function t(e,t){e[4]=t}
|
|
2
|
+
import{Placement as e}from"./CIMPlacements.js";function t(e,t){e[4]=t}function n(e){if(!(Math.abs(e)>.5*Math.PI))return null;let t=e+Math.PI,n=Math.atan2(Math.sin(t),Math.cos(t));return Number.isNaN(n)?null:n}class r{constructor(t,n=!0,r=!0,i=0){this._angleToLine=!0,this._keepUpright=!1,this.isClosed=!1,this.geometryCursor=null,this.geometryCursor=!n&&t.geometryType===`esriGeometryPolygon`||!r&&t.geometryType===`esriGeometryPolyline`?null:t,this.geomUnitsPerPoint=i,this.iterateMultiPath=!1,this.iteratePath=!1,this.internalPlacement=new e}next(){if(!this.geometryCursor)return null;let e=this.processMultiPath(this.geometryCursor);if((!this.iterateMultiPath||!e)&&(this.geometryCursor=null),!e)return null;let t=e.getAngle(),r=this._angleToLine&&this._keepUpright?n(t):null;return r!=null&&e.setRotate(r),e}processMultiPath(e){for(;this.iteratePath||e.pathIndex<e.totalSize-1;){this.iteratePath||e.nextPath(),this.iterateMultiPath=!0;let t=this.processPath(e);if(t)return t}return this.iterateMultiPath=!1,null}}class i{constructor(e,t,n,r=0){this.isClosed=!1,this.inputGeometries=e,this.acceptPolygon=t,this.acceptPolyline=n,this.geomUnitsPerPoint=r,this.iteratePath=!1,this.multiPathCursor=null}next(){for(;;){if(!this.multiPathCursor){let e=this.inputGeometries.next();for(;e;){if(this.isClosed=this.acceptPolygon&&e.geometryType===`esriGeometryPolygon`||e.geometryType===`esriGeometryEnvelope`,this.multiPathCursor=e,!this.multiPathCursor){e=this.inputGeometries.next();continue}break}if(!this.multiPathCursor)return null}for(;this.iteratePath||this.multiPathCursor.nextPath();){this.multiPathCursor.seekPathStart();let e=this.processPath(this.multiPathCursor);if(e)return e}this.multiPathCursor=null}}}export{i as PathEffectCursor,r as PathTransformationCursor,n as getUprightAngle,t as setId};
|
package/tables/elements.d.ts
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
* }
|
|
33
33
|
* ```
|
|
34
34
|
*
|
|
35
|
+
* @deprecated since version 4.34. Import individual element modules directly instead.
|
|
35
36
|
* @since 4.31
|
|
36
37
|
* @see [AttributeTableTemplate](https://developers.arcgis.com/javascript/latest/references/core/tables/AttributeTableTemplate/)
|
|
37
38
|
* @see [AttributeTableAttachmentElement](https://developers.arcgis.com/javascript/latest/references/core/tables/elements/AttributeTableAttachmentElement/)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import e from"../../../../request.js";import{bidiText as t}from"../../../../core/BidiText.js";import{getFullyQualifiedFontName as n}from"../../../../core/fontUtils.js";import has from"../../../../core/has.js";import r from"../../../../core/Logger.js";import{ignoreAbortErrors as i,throwIfNotAbortError as a}from"../../../../core/promiseUtils.js";import{loadTextModule as o}from"../../../../libs/librust-text/loadTextModule.js";import{parseRichTextRuns as s}from"../../../../symbols/cim/richTextUtils.js";import{decorGlyphRect as c}from"./decorGlyphRect.js";import{sdfRadiusComplex as l,sdfBufferGlyphSDFCreator as u,sdfSizeComplex as d,sdfBufferServer as f,sdfRadiusSimple as p,sdfSizeSimple as m}from"./definitions.js";import{GlyphSDFCreator as h}from"./GlyphSDFCreator.js";import g from"./GlyphSource.js";import{hashMosaic as _}from"./hashMosaic.js";import v from"./Rect.js";import y from"./RectangleBinPack.js";const b=`arial-unicode-ms-regular`,x=/[\u0695\u0698\u06a9\u06af\u06b5\u06be\u06c6\u06cc\u06ce\u06d5\u06ca]|\p{Script=Thai}|\p{Script=Lao}|\p{Script=Tamil}|\p{Script=Khmer}/u,S=new Set([`Noto Sans Khmer`,`Noto Sans Lao`,`Noto Sans Myanmar`,`Noto Sans Thai`]),C=()=>r.getLogger(`esri.views.MapView`),w=(e,t=``)=>C().warnOnce(e,t);class T{constructor(){this._glyphSources=new Map,this._snapCoords=!0,this._currentPage=0,this._faces=new Map,this._facePromises=new Map,this._pbfRangePromises=new Map,this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._invalidFonts=new Set,this._preloadCache={},this._glyphSDFCreator=new h({sdfSizePx:d,sdfBufferPx:u,radius:l,cutoff:.25})}set remoteClient(e){this._client=e.createInvokeProxy();let t=i(this._client.getOptions());this._inited=this._init(t)}async rasterizeText(e,t,n){await this._inited;let r=t.symbol?s(t):null;return r?{type:`rich-glyphs`,runs:(await Promise.all(r.map(async t=>({fontSize:t.fontSize,characterSpacing:t.characterSpacing,decoration:t.font.decoration,color:t.color,glyphs:await this._rasterizeTextRun(e,t.font,t.text,n)})))).filter(e=>e.glyphs!=null)}:this._rasterizeTextRun(e,t.font,t.textString,n)}async _rasterizeTextRun(e,t,r,i){let a=n(t),o=this._invalidFonts.has(a),s=!!has(`esri-2d-force-complex-shaping`),c=!!has(`esri-2d-complex-shaping`)&&x.test(r),l=S.has(t.family),u=s||c||l,d=o?b:a,f=await this.getGlyphItems(r,u,e,d,!1,i);return f||=(w(`Font ${a} is not available on the web, using "Arial Unicode MS Regular"`),this._invalidFonts.add(a),await this.getGlyphItems(r,u,e,b,!1,i)),f}async getGlyphItems(e,n,r,i,a,o){await this._inited;let s=this._getSource(r),c=n?d:m,h=n?l:p,g=n?u:f,_,v,y;if(has(`esri-2d-stabilize-glyphs`)&&await this.preloadASCIIGlyphCache(s,i).catch(()=>{}),n){let t=await this._getFace(s,i);if(!t)return null;let n=this._glyphCache.get(i);n||(n=new Map,this._glyphCache.set(i,n));let{shaping:r,isRTL:a}=this._shape(t,e);y=a,_=r.map(e=>this._getShapedGlyph(t,n,e)),v={baseline:t.baseline()/c,midline:t.midline()/c}}else{let n=this._pbfGlyphCache.get(i);n||(n=new Map,this._pbfGlyphCache.set(i,n));let[r,c,l]=t(e),u=k(r);try{await this._fetchRanges(s,i,u,o)}catch{return null}y=c,_=u.map(e=>this._getPBFGlyph(n,s,i,e,a)).filter(e=>!!e)}let b=_.filter(e=>e.needsRecord);return b.length>0&&await this._client.recordGlyphs(b),{type:`glyphs`,glyphs:_,faceInfo:v,isRightToLeft:y,sdfSize:c,sdfRadius:h,sdfPadding:g}}async _init(e){let t=await e;if(!t)return;let{width:n,height:r,snapCoords:i}=t;this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._binPack=new y(n,r),this._snapCoords=i,this._currentPage=0,this._initDecorationGlyphs()}_getShapedGlyph(e,t,n){let r,i,a=t.get(n.glyphId);if(!a){r=this._glyphSDFCreator.draw(e,n.glyphId);let o=this._glyphSDFCreator.sdfBufferPx;a={mosaicItem:{rect:this._recordGlyph(r?.rect,o),page:this._currentPage,sdf:!0,textureBinding:_(1,this._currentPage,!0)},glyphRect:r?.rect??{width:0,height:0,top:0,left:0}},t.set(n.glyphId,a),i=!0}return{mosaicItem:a.mosaicItem,rect:a.glyphRect,shaping:{xAdvance:n.xAdvance,yAdvance:n.yAdvance,xOffset:n.xOffset,yOffset:n.yOffset},code:n.isNewline?10:n.isWhitespace?32:NaN,sdf:r,needsRecord:i}}_getPBFGlyph(e,t,n,r,i=!1){let a,o,s=e.get(r);if(!s){let c=t.getRange(n,r),l=c?.getRect(r),d=c?.getShaping(r),f=c?.getBitmap(r);if(i&&(!l||!d))return;if(!l||!d)return O(r);let p={rect:f?this._recordGlyph(l,u):new v(0,0,0,0),sdf:!0,page:this._currentPage,textureBinding:_(1,this._currentPage,!0)};a=f&&{buffer:f,rect:l},s={mosaicItem:p,rect:l,shaping:d,code:r},o=!0,e.set(r,s)}let{mosaicItem:c,rect:l,shaping:d}=s;return{mosaicItem:c,rect:l,shaping:d,code:r,sdf:a,needsRecord:o}}_shape(e,n){let r=this._glyphSDFCreator.sdfSizePx,[i,a,o]=t(n,!1),s=new Uint32Array(Array.from(i).map((e,t)=>o.levels[o.targetToSource[t]]));return{shaping:e.shape(i,s,r),isRTL:a}}async _getFace(t,n,r){if(this._faces.has(n))return this._faces.get(n);let i=t.woffURL(n);return await D(this._facePromises,n,async()=>{let t=await e(i,{responseType:`array-buffer`,...r}),a=(await o()).Face.parseWoff2(new Uint8Array(t.data));this._faces.set(n,a)}),this._faces.get(n)}_getSource(e){return this._glyphSources.has(e)||this._glyphSources.set(e,new g(e)),this._glyphSources.get(e)}async _fetchRanges(e,t,n,r){let i=E(n),a=[];i.forEach(n=>{a.push(this._fetchRange(e,t,n,r))}),await Promise.all(a)}async _fetchRange(e,t,n,r){if(n>256)return;let i=t+n;return D(this._pbfRangePromises,i,()=>e.fetchRange(t,n,r))}_allocNewPage(){this._currentPage++,this._binPack=new y(this._binPack.width,this._binPack.height),this._initDecorationGlyphs()}_recordGlyph(e,t){let n=this._binPack;if(!e||e.width===0)return new v;let r=e.width+t*2,i=e.height+t*2,a=r,o=i;if(this._snapCoords){let e=r%4?4-r%4:4,t=i%4?4-i%4:4;a+=e,o+=t}let s=n.allocate(a,o);return s.isEmpty?(this._allocNewPage(),n.allocate(a,o)):s}_initDecorationGlyphs(){this._recordGlyph(c,f),this._recordGlyph(c,f)}preloadASCIIGlyphCache(e,t){let n=this._preloadCache[t];if(n!=null)return n;let r=e.preloadASCIIRange(t).then(async()=>{let n=this._pbfGlyphCache.get(t);n||(n=new Map,this._pbfGlyphCache.set(t,n));let r=[];for(let i=0;i<256;i++){let a=this._getPBFGlyph(n,e,t,i);a?.needsRecord&&r.push(a)}await this._client.recordGlyphs(r)},e=>{throw delete this._preloadCache[t],e});return this._preloadCache[t]=r,r}}function E(e){let t=new Set;for(let n of e)t.add(Math.floor(n/256));return t}function D(e,t,n){return e.has(t)||e.set(t,n().finally(()=>{e.delete(t)}).catch(e=>{a(e)})),e.get(t)}const O=e=>({mosaicItem:{rect:new v(0,0,0,0),sdf:!0,page:0},rect:{left:0,width:0,height:0,top:0},shaping:{xAdvance:0,yAdvance:0,xOffset:0,yOffset:0},code:e});function k(e){let t=[];for(let n=0;n<e.length;n++)t.push(e.charCodeAt(n));return t}export{T as default};
|
|
2
|
+
import e from"../../../../request.js";import{bidiText as t}from"../../../../core/BidiText.js";import{getFullyQualifiedFontName as n}from"../../../../core/fontUtils.js";import has from"../../../../core/has.js";import r from"../../../../core/Logger.js";import{ignoreAbortErrors as i,throwIfNotAbortError as a}from"../../../../core/promiseUtils.js";import{loadTextModule as o}from"../../../../libs/librust-text/loadTextModule.js";import{parseRichTextRuns as s}from"../../../../symbols/cim/richTextUtils.js";import{decorGlyphRect as c}from"./decorGlyphRect.js";import{sdfRadiusComplex as l,sdfBufferGlyphSDFCreator as u,sdfSizeComplex as d,sdfBufferServer as f,sdfRadiusSimple as p,sdfSizeSimple as m}from"./definitions.js";import{GlyphSDFCreator as h}from"./GlyphSDFCreator.js";import g from"./GlyphSource.js";import{hashMosaic as _}from"./hashMosaic.js";import v from"./Rect.js";import y from"./RectangleBinPack.js";const b=`arial-unicode-ms-regular`,x=/[\u0695\u0698\u06a9\u06af\u06b5\u06be\u06c6\u06cc\u06ce\u06d5\u06ca]|\p{Script=Thai}|\p{Script=Lao}|\p{Script=Tamil}|\p{Script=Khmer}/u,S=new Set([`Noto Sans Khmer`,`Noto Sans Lao`,`Noto Sans Myanmar`,`Noto Sans Thai`]),C=()=>r.getLogger(`esri.views.MapView`),w=(e,t=``)=>C().warnOnce(e,t);class T{constructor(){this._glyphSources=new Map,this._snapCoords=!0,this._currentPage=0,this._faces=new Map,this._facePromises=new Map,this._pbfRangePromises=new Map,this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._invalidFonts=new Set,this._preloadCache={},this._glyphSDFCreator=new h({sdfSizePx:d,sdfBufferPx:u,radius:l,cutoff:.25})}set remoteClient(e){this._client=e.createInvokeProxy();let t=i(this._client.getOptions());this._inited=this._init(t)}async rasterizeText(e,t,n){await this._inited;let r=t.symbol?s(t):null;return r?{type:`rich-glyphs`,runs:(await Promise.all(r.map(async t=>({fontSize:t.fontSize,characterSpacing:t.characterSpacing,decoration:t.font.decoration,color:t.color,glyphs:await this._rasterizeTextRun(e,t.font,t.text,n)})))).filter(e=>e.glyphs!=null)}:this._rasterizeTextRun(e,t.font,t.textString,n)}async _rasterizeTextRun(e,t,r,i){let a=n(t),o=this._invalidFonts.has(a),s=!!has(`esri-2d-force-complex-shaping`),c=!!has(`esri-2d-complex-shaping`)&&x.test(r),l=S.has(t.family),u=s||c||l,d=o?b:a,f=await this.getGlyphItems(r,u,e,d,!1,i);return f||=(w(`Font ${a} is not available on the web, using "Arial Unicode MS Regular"`),this._invalidFonts.add(a),await this.getGlyphItems(r,u,e,b,!1,i)),f}async getGlyphItems(e,n,r,i,a,o){await this._inited;let s=this._getSource(r),c=n?d:m,h=n?l:p,g=n?u:f,_,v,y;if(has(`esri-2d-stabilize-glyphs`)&&await this.preloadASCIIGlyphCache(s,i).catch(()=>{}),n){let t=await this._getFace(s,i);if(!t)return null;let n=this._glyphCache.get(i);n||(n=new Map,this._glyphCache.set(i,n));let{shaping:r,isRTL:a}=this._shape(t,e);y=a,_=r.map(e=>this._getShapedGlyph(t,n,e)),v={baseline:t.baseline()/c,midline:t.midline()/c}}else{let n=this._pbfGlyphCache.get(i);n||(n=new Map,this._pbfGlyphCache.set(i,n));let[r,c,l]=t(e),u=k(r);try{await this._fetchRanges(s,i,u,o)}catch{return null}y=c,_=u.map(e=>this._getPBFGlyph(n,s,i,e,a)).filter(e=>!!e)}let b=_.filter(e=>e.needsRecord);return b.length>0&&await this._client.recordGlyphs(b),{type:`glyphs`,glyphs:_,faceInfo:v,isRightToLeft:y,sdfSize:c,sdfRadius:h,sdfPadding:g}}async _init(e){let t=await e;if(!t)return;let{width:n,height:r,snapCoords:i}=t;this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._binPack=new y(n,r),this._snapCoords=i,this._currentPage=0,this._initDecorationGlyphs()}_getShapedGlyph(e,t,n){let r,i,a=t.get(n.glyphId);if(!a){r=this._glyphSDFCreator.draw(e,n.glyphId);let o=this._glyphSDFCreator.sdfBufferPx;a={mosaicItem:{rect:this._recordGlyph(r?.rect,o),page:this._currentPage,sdf:!0,textureBinding:_(1,this._currentPage,!0)},glyphRect:r?.rect??{width:0,height:0,top:0,left:0}},t.set(n.glyphId,a),i=!0}return{mosaicItem:a.mosaicItem,rect:a.glyphRect,shaping:{xAdvance:n.xAdvance,yAdvance:n.yAdvance,xOffset:n.xOffset,yOffset:n.yOffset},code:n.isNewline?10:n.isWhitespace?32:NaN,sdf:r,needsRecord:i}}_getPBFGlyph(e,t,n,r,i=!1){let a,o,s=e.get(r);if(!s){let c=t.getRange(n,r),l=c?.getRect(r),d=c?.getShaping(r),f=c?.getBitmap(r);if(i&&(!l||!d))return;if(!l||!d)return O(r);let p={rect:f?this._recordGlyph(l,u):new v(0,0,0,0),sdf:!0,page:this._currentPage,textureBinding:_(1,this._currentPage,!0)};a=f&&{buffer:f,rect:l},s={mosaicItem:p,rect:l,shaping:d,code:r},o=!0,e.set(r,s)}let{mosaicItem:c,rect:l,shaping:d}=s;return{mosaicItem:c,rect:l,shaping:d,code:r,sdf:a,needsRecord:o}}_shape(e,n){let r=this._glyphSDFCreator.sdfSizePx,[i,a,o]=t(n,!1),s=new Uint32Array(Array.from(i).map((e,t)=>o.levels[o.targetToSource[t]]));return{shaping:e.shape(i,s,r),isRTL:a}}async _getFace(t,n,r){if(this._faces.has(n))return this._faces.get(n);let i=t.woffURL(n);return await D(this._facePromises,n,async()=>{let t=await e(i,{responseType:`array-buffer`,...r}),a=(await o()).Face.parseWoff2(new Uint8Array(t.data));this._faces.set(n,a)}),this._faces.get(n)}_getSource(e){return this._glyphSources.has(e)||this._glyphSources.set(e,new g(e)),this._glyphSources.get(e)}async _fetchRanges(e,t,n,r){let i=E(n),a=[];i.forEach(n=>{a.push(this._fetchRange(e,t,n,r))}),await Promise.all(a)}async _fetchRange(e,t,n,r){if(n>256)return;let i=t+n;return D(this._pbfRangePromises,i,()=>e.fetchRange(t,n,r))}_allocNewPage(){this._currentPage++,this._binPack=new y(this._binPack.width,this._binPack.height),this._initDecorationGlyphs()}_recordGlyph(e,t){let n=this._binPack;if(!e||e.width===0)return new v;let r=e.width+t*2,i=e.height+t*2,a=r,o=i;if(this._snapCoords){let e=r%4?4-r%4:4,t=i%4?4-i%4:4;a+=e,o+=t}let s=n.allocate(a,o);return s.isEmpty?(this._allocNewPage(),n.allocate(a,o)):s}_initDecorationGlyphs(){this._recordGlyph(c,f),this._recordGlyph(c,f)}preloadASCIIGlyphCache(e,t){let n=this._preloadCache[t];if(n!=null)return n;let r=e.preloadASCIIRange(t).then(async()=>{let n=this._pbfGlyphCache.get(t);n||(n=new Map,this._pbfGlyphCache.set(t,n));let r=[];for(let i=0;i<256;i++){let a=this._getPBFGlyph(n,e,t,i);a?.needsRecord&&r.push(a)}await this._client.recordGlyphs(r)},e=>{throw delete this._preloadCache[t],e});return this._preloadCache[t]=r,r}}function E(e){let t=new Set;for(let n of e)t.add(Math.floor(n/256));return t}function D(e,t,n){return e.has(t)||e.set(t,n().finally(()=>{e.delete(t)}).catch(e=>{a(e)})),e.get(t)}const O=e=>({mosaicItem:{rect:new v(0,0,0,0),sdf:!0,page:0,textureBinding:_(1,0,!0)},rect:{left:0,width:0,height:0,top:0},shaping:{xAdvance:0,yAdvance:0,xOffset:0,yOffset:0},code:e,needsRecord:!0});function k(e){let t=[];for(let n=0;n<e.length;n++)t.push(e.charCodeAt(n));return t}export{T as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import e from"../../../../core/Error.js";import has from"../../../../core/has.js";import{spritePadding as t}from"./definitions.js";import{log2 as n}from"./GeometryUtils.js";import r from"./Rect.js";import i from"./RectangleBinPack.js";import a from"../../../webgl/Texture.js";import{TextureDescriptor as o}from"../../../webgl/TextureDescriptor.js";function s(e){return e&&e.type===`static`}class c{constructor(e,t,n=0){this._mosaicPages=[],this._maxItemSize=0,this._currentPage=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects=new Map,this._pageWidth=e,this._pageHeight=t,n>0&&(this._maxItemSize=n),this._binPack=new i(this._pageWidth,this._pageHeight);let r=Math.floor(this._pageWidth),a=Math.floor(this._pageHeight);this._mosaicPages.push({mosaicsData:{type:`static`,data:new Uint32Array(r*a)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0})}getSize(e){return e>=this._mosaicPages.length?[0,0]:this._mosaicPages[e].size}has(e){return this._mosaicRects.has(e)}getSpriteItem(e){return this._mosaicRects.get(e)}addSpriteItem(e,n,i,a,o,c,l=1,u=`Linear`,d=.5,f=1){if(this._mosaicRects.has(e))return this._mosaicRects.get(e);let p,m,h;if(s(i)?[p,m,h]=this._allocateImage(n[0],n[1]):(p=new r(0,0,n[0],n[1]),m=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:i,size:[n[0]+2*t,n[1]+2*t],dirty:!0,texture:void 0})),p.width<=0||p.height<=0)return null;let g={type:`sprite`,rect:p,width:n[0],height:n[1],sdf:o,simplePattern:c,rasterizationScale:l,samplingMode:u,sdfPaddingRatio:d,sdfDecodeCoeff:f,page:m};return this._mosaicRects.set(e,g),s(i)&&(has(`esri-mosaic-debug`)&&this._showDebugSprite(n,i.data),this._copy({rect:p,spriteSize:n,spriteData:i.data,page:m,pageSize:h,repeat:a,sdf:o})),g}getTexture(e,t=0){let{context:n}=e,r=this._mosaicPages[t],i=r.mosaicsData,a=r.texture;if(a||(a=u(n,r.size),r.texture=a),s(i))r.dirty&&(a.setData(new Uint8Array(i.data.buffer)),a.generateMipmap(),has(`esri-mosaic-debug`)&&this._showDebugPage(t));else{let t=i.data;t.update(e),t.hasFrameData&&(t.loadFrame(a),a.generateMipmap())}return r.dirty=!1,a}dispose(){this._binPack=null;for(let e of this._mosaicPages){let t=e.texture;t&&t.dispose();let n=e.mosaicsData;s(n)||n.data.destroy()}this._mosaicPages=null,this._mosaicRects.clear()}static _copyBits(e,t,n,r,i,a,o,s,c,l,u){let d=r*t+n,f=s*a+o;if(u){f-=a;for(let o=-1;o<=l;o++,d=((o+l)%l+r)*t+n,f+=a)for(let t=-1;t<=c;t++)i[f+t]=e[d+(t+c)%c]}else for(let n=0;n<l;n++){for(let t=0;t<c;t++)i[f+t]=e[d+t];d+=t,f+=a}}_copy(n){if(n.page>=this._mosaicPages.length)return;let r=this._mosaicPages[n.page],i=r.mosaicsData;if(!s(r.mosaicsData))throw new e(`mapview-invalid-resource`,`unsuitable data type!`);let a=n.spriteData,o=i.data;c._copyBits(a,n.spriteSize[0],0,0,o,n.pageSize[0],n.rect.x+t,n.rect.y+t,n.spriteSize[0],n.spriteSize[1],n.repeat),r.dirty=!0}_allocateImage(e,a){e+=2*t,a+=2*t;let o=Math.max(e,a);if(this._maxItemSize&&this._maxItemSize<o){let t=2**Math.ceil(n(e)),i=2**Math.ceil(n(a)),o=new r(0,0,e,a);return this._mosaicPages.push({mosaicsData:{type:`static`,data:new Uint32Array(t*i)},size:[t,i],dirty:!0,texture:void 0}),[o,this._mosaicPages.length-1,[t,i]]}let c=this._binPack.allocate(e,a);if(c.width<=0){let t=this._mosaicPages[this._currentPage];return!t.dirty&&s(t.mosaicsData)&&(t.mosaicsData.data=null),this._currentPage=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:{type:`static`,data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0}),this._binPack=new i(this._pageWidth,this._pageHeight),this._allocateImage(e,a)}return[c,this._currentPage,[this._pageWidth,this._pageHeight]]}_showDebugSprite([e,t],n){let r=document.createElement(`canvas`);r.width=e,r.height=t,r.setAttribute(`style`,`position: absolute; top: ${4+204*l++}px; right: 208px; width: 200px; height: 200px; border: 1px solid black;`);let i=r.getContext(`2d`),a=new ImageData(e,t);a.data.set(new Uint8Array(n.buffer)),i.putImageData(a,0,0),document.body.appendChild(r)}_showDebugPage(e){let{size:[t,n],mosaicsData:r}=this._mosaicPages[e];if(!s(r))return;let i=`mosaicDebugPage${e}`,a=document.getElementById(i)??document.createElement(`canvas`);a.id=i,a.width=t,a.height=n,a.setAttribute(`style`,`position: absolute; top: ${4+204*e}px; right: 4px; width: 200px; height: 200px; border: 1px solid black;`);let o=a.getContext(`2d`),c=new ImageData(t,n);c.data.set(new Uint8Array(r.data.buffer)),o.putImageData(c,0,0),document.body.appendChild(a)}}let l=0;function u(e,
|
|
2
|
+
import e from"../../../../core/Error.js";import has from"../../../../core/has.js";import{spritePadding as t}from"./definitions.js";import{log2 as n}from"./GeometryUtils.js";import r from"./Rect.js";import i from"./RectangleBinPack.js";import a from"../../../webgl/Texture.js";import{TextureDescriptor as o}from"../../../webgl/TextureDescriptor.js";function s(e){return e&&e.type===`static`}class c{constructor(e,t,n=0){this._mosaicPages=[],this._maxItemSize=0,this._currentPage=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects=new Map,this._pageWidth=e,this._pageHeight=t,n>0&&(this._maxItemSize=n),this._binPack=new i(this._pageWidth,this._pageHeight);let r=Math.floor(this._pageWidth),a=Math.floor(this._pageHeight);this._mosaicPages.push({mosaicsData:{type:`static`,data:new Uint32Array(r*a)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0})}getSize(e){return e>=this._mosaicPages.length?[0,0]:this._mosaicPages[e].size}has(e){return this._mosaicRects.has(e)}getSpriteItem(e){return this._mosaicRects.get(e)}addSpriteItem(e,n,i,a,o,c,l=1,u=`Linear`,d=.5,f=1){if(this._mosaicRects.has(e))return this._mosaicRects.get(e);let p,m,h;if(s(i)?[p,m,h]=this._allocateImage(n[0],n[1]):(p=new r(0,0,n[0],n[1]),m=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:i,size:[n[0]+2*t,n[1]+2*t],dirty:!0,texture:void 0})),p.width<=0||p.height<=0)return null;let g={type:`sprite`,rect:p,width:n[0],height:n[1],sdf:o,simplePattern:c,rasterizationScale:l,samplingMode:u,sdfPaddingRatio:d,sdfDecodeCoeff:f,page:m};return this._mosaicRects.set(e,g),s(i)&&(has(`esri-mosaic-debug`)&&this._showDebugSprite(n,i.data),this._copy({rect:p,spriteSize:n,spriteData:i.data,page:m,pageSize:h,repeat:a,sdf:o})),g}getTexture(e,t=0){let{context:n}=e,r=this._mosaicPages[t],i=r.mosaicsData,a=r.texture;if(a||(a=u(n,r.size),r.texture=a),s(i))r.dirty&&(a.setData(new Uint8Array(i.data.buffer)),a.generateMipmap(),has(`esri-mosaic-debug`)&&this._showDebugPage(t));else{let t=i.data;t.update(e),t.hasFrameData&&(t.loadFrame(a),a.generateMipmap())}return r.dirty=!1,a}dispose(){this._binPack=null;for(let e of this._mosaicPages){let t=e.texture;t&&t.dispose();let n=e.mosaicsData;s(n)||n.data.destroy()}this._mosaicPages=null,this._mosaicRects.clear()}static _copyBits(e,t,n,r,i,a,o,s,c,l,u){let d=r*t+n,f=s*a+o;if(u){f-=a;for(let o=-1;o<=l;o++,d=((o+l)%l+r)*t+n,f+=a)for(let t=-1;t<=c;t++)i[f+t]=e[d+(t+c)%c]}else for(let n=0;n<l;n++){for(let t=0;t<c;t++)i[f+t]=e[d+t];d+=t,f+=a}}_copy(n){if(n.page>=this._mosaicPages.length)return;let r=this._mosaicPages[n.page],i=r.mosaicsData;if(!s(r.mosaicsData))throw new e(`mapview-invalid-resource`,`unsuitable data type!`);let a=n.spriteData,o=i.data;c._copyBits(a,n.spriteSize[0],0,0,o,n.pageSize[0],n.rect.x+t,n.rect.y+t,n.spriteSize[0],n.spriteSize[1],n.repeat),r.dirty=!0}_allocateImage(e,a){e+=2*t,a+=2*t;let o=Math.max(e,a);if(this._maxItemSize&&this._maxItemSize<o){let t=2**Math.ceil(n(e)),i=2**Math.ceil(n(a)),o=new r(0,0,e,a);return this._mosaicPages.push({mosaicsData:{type:`static`,data:new Uint32Array(t*i)},size:[t,i],dirty:!0,texture:void 0}),[o,this._mosaicPages.length-1,[t,i]]}let c=this._binPack.allocate(e,a);if(c.width<=0){let t=this._mosaicPages[this._currentPage];return!t.dirty&&s(t.mosaicsData)&&(t.mosaicsData.data=null),this._currentPage=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:{type:`static`,data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0}),this._binPack=new i(this._pageWidth,this._pageHeight),this._allocateImage(e,a)}return[c,this._currentPage,[this._pageWidth,this._pageHeight]]}_showDebugSprite([e,t],n){let r=document.createElement(`canvas`);r.width=e,r.height=t,r.setAttribute(`style`,`position: absolute; top: ${4+204*l++}px; right: 208px; width: 200px; height: 200px; border: 1px solid black;`);let i=r.getContext(`2d`),a=new ImageData(e,t);a.data.set(new Uint8Array(n.buffer)),i.putImageData(a,0,0),document.body.appendChild(r)}_showDebugPage(e){let{size:[t,n],mosaicsData:r}=this._mosaicPages[e];if(!s(r))return;let i=`mosaicDebugPage${e}`,a=document.getElementById(i)??document.createElement(`canvas`);a.id=i,a.width=t,a.height=n,a.setAttribute(`style`,`position: absolute; top: ${4+204*e}px; right: 4px; width: 200px; height: 200px; border: 1px solid black;`);let o=a.getContext(`2d`),c=new ImageData(t,n);c.data.set(new Uint8Array(r.data.buffer)),o.putImageData(c,0,0),document.body.appendChild(a)}}let l=0;function u(e,n){let r=new o(n[0],n[1]);return r.wrapMode=33071,r.maxMipLevel=Math.floor(Math.log2(t/2)),new a(e,r,null)}export{c as default};
|
|
@@ -8,5 +8,5 @@ class e{generateSource(e){let t=[];for(let n=1;n<this.length;n++)t.push(`vec4 at
|
|
|
8
8
|
cos1 * s1 * x2 - sin1 * s1 * y2 + x1,
|
|
9
9
|
sin1 * s1 * x2 + cos1 * s1 * y2 + y1
|
|
10
10
|
);
|
|
11
|
-
`,`out0 = vec4(translation, rotation, scale);`]}encode(e){return[[this.opcode,0,0,0],[e.translation.from[0],e.translation.from[1],e.translation.to[0],e.translation.to[1]],[e.rotation.from,e.rotation.to,e.scale.from,e.scale.to],...p(e.translation.timing),...p(e.rotation.timing),...p(e.scale.timing),[+!!e.relativeTranslation,+!!e.absoluteScale,+!!e.selectGlobalRotation,0]]}}class h extends e{constructor(){super(...arguments),this.opcode=++t,this.length=7,this.ins=1,this.outs=1,this.microcode=[`float fromOpacity = atom0.y;`,`float toOpacity = atom0.z;`,`vec4 fromColor = atom1;`,`vec4 toColor = atom2;`,`float fColor;`,`{`,...c({duration:`atom3.x`,startTimeOffset:`atom3.y`,repeatDelay:`atom3.z`,timeOriginSelector:`atom3.w`,repeatType:`atom4.x`,easing:`atom4.y`,playAnimation:`atom4.z`,reverseAnimation:`atom4.w`,out:`fColor`}),`}`,`float fOpacity;`,`{`,...c({duration:`atom5.x`,startTimeOffset:`atom5.y`,repeatDelay:`atom5.z`,timeOriginSelector:`atom5.w`,repeatType:`atom6.x`,easing:`atom6.y`,playAnimation:`atom6.z`,reverseAnimation:`atom6.w`,out:`fOpacity`}),`}`,`vec4 aColor = mix(fromColor, toColor, fColor);`,`aColor.a *= mix(fromOpacity, toOpacity, fOpacity);`,`vec4 pColor = in0;`,`out0 = aColor * pColor;`]}encode(e){return[[this.opcode,e.opacity.from,e.opacity.to,0],[e.color.from[0],e.color.from[1],e.color.from[2],e.color.from[3]],[e.color.to[0],e.color.to[1],e.color.to[2],e.color.to[3]],...p(e.color.timing),...p(e.opacity.timing)]}}class g extends e{constructor(){super(...arguments),this.opcode=++t,this.length=4,this.ins=1,this.outs=1,this.microcode=[`float fromShift = atom0.y;`,`float toShift = atom0.z;`,`float duration = atom1.x;`,`bool multiplyToByLineLength = atom3.x == 1.0;`,`bool multiplyDurationByLineLength = atom3.y == 1.0;`,`bool continuous = atom3.z == 1.0;`,`toShift *= multiplyToByLineLength ? lineLength : 1.0;`,`duration *= multiplyDurationByLineLength ? lineLength : 1.0;`,`float fShift;`,`if (continuous) {`,...l({duration:`duration`,startTimeOffset:`atom1.y`,repeatDelay:`atom1.z`,timeOriginSelector:`atom1.w`,easing:`atom2.y`,playAnimation:`atom2.z`,reverseAnimation:`atom2.w`,out:`fShift`}),`} else {`,...c({duration:`duration`,startTimeOffset:`atom1.y`,repeatDelay:`atom1.z`,timeOriginSelector:`atom1.w`,repeatType:`atom2.x`,easing:`atom2.y`,playAnimation:`atom2.z`,reverseAnimation:`atom2.w`,out:`fShift`}),`}`,`float aShift = mix(fromShift, toShift, fShift);`,`vec4 pShift = in0;`,`out0 = mod(aShift + pShift, lineLength);`]}encode(e){return[[this.opcode,e.shift.from,e.shift.to,0],...p(e.shift.timing),[+!!e.multiplyToByLineLength,+!!e.multiplyDurationByLineLength,+!!e.continuous,0]]}}const _={scalar:new r,vector3:new i,vector4:new a,animatedTransform:new m,animatedColor:new h,animatedShift:new g,ret:new n},v=4;function y(e){let t=[];t.push(`float globalTime = ${e.globalTime};`),t.push(`float localTimeOrigin = ${e.localTimeOrigin};`),t.push(`float lineLength = ${e.lineLength};`),t.push(`float globalRotation = ${e.globalRotation};`),t.push(`vec2 pointer = ${e.animationPointer};`),t.push(`vec2 size = ${e.animationTextureSize};`),t.push(`int top = 0;`),t.push(`vec4 stack[4];`),t.push(`for (int counter = 0; counter < 40; counter++) {`),t.push(`vec4 atom0 = texture(${e.animationTexture}, (pointer + 0.5) / size);`),t.push(`pointer.x += 1.0;`),t.push(`vec2 pixelDimensions = ${e.pixelDimensions};`),t.push(`if (false) {`);for(let n in _){let r=_[n];t.push(`} else if (int(atom0.x) == ${r.opcode}) {`);for(let n of r.generateSource(e))t.push(n)}return t.push(`} // End if-else.`),t.push(`} // End for.`),t.push(`${e.out} = top > 0 ? stack[top - 1] : vec4(0.0);`),t.join(`
|
|
11
|
+
`,`out0 = vec4(translation, rotation, scale);`]}encode(e){return[[this.opcode,0,0,0],[e.translation.from[0],e.translation.from[1],e.translation.to[0],e.translation.to[1]],[e.rotation.from,e.rotation.to,e.scale.from,e.scale.to],...p(e.translation.timing),...p(e.rotation.timing),...p(e.scale.timing),[+!!e.relativeTranslation,+!!e.absoluteScale,+!!e.selectGlobalRotation,0]]}}class h extends e{constructor(){super(...arguments),this.opcode=++t,this.length=7,this.ins=1,this.outs=1,this.microcode=[`float fromOpacity = atom0.y;`,`float toOpacity = atom0.z;`,`vec4 fromColor = atom1;`,`vec4 toColor = atom2;`,`float fColor;`,`{`,...c({duration:`atom3.x`,startTimeOffset:`atom3.y`,repeatDelay:`atom3.z`,timeOriginSelector:`atom3.w`,repeatType:`atom4.x`,easing:`atom4.y`,playAnimation:`atom4.z`,reverseAnimation:`atom4.w`,out:`fColor`}),`}`,`float fOpacity;`,`{`,...c({duration:`atom5.x`,startTimeOffset:`atom5.y`,repeatDelay:`atom5.z`,timeOriginSelector:`atom5.w`,repeatType:`atom6.x`,easing:`atom6.y`,playAnimation:`atom6.z`,reverseAnimation:`atom6.w`,out:`fOpacity`}),`}`,`vec4 aColor = mix(fromColor, toColor, fColor);`,`aColor.a *= mix(fromOpacity, toOpacity, fOpacity);`,`vec4 pColor = in0;`,`out0 = aColor * pColor;`]}encode(e){return[[this.opcode,e.opacity.from,e.opacity.to,0],[e.color.from[0],e.color.from[1],e.color.from[2],e.color.from[3]],[e.color.to[0],e.color.to[1],e.color.to[2],e.color.to[3]],...p(e.color.timing),...p(e.opacity.timing)]}}class g extends e{constructor(){super(...arguments),this.opcode=++t,this.length=4,this.ins=1,this.outs=1,this.microcode=[`float fromShift = atom0.y;`,`float toShift = atom0.z;`,`float duration = atom1.x;`,`bool multiplyToByLineLength = atom3.x == 1.0;`,`bool multiplyDurationByLineLength = atom3.y == 1.0;`,`bool continuous = atom3.z == 1.0;`,`toShift *= multiplyToByLineLength ? lineLength : 1.0;`,`duration *= multiplyDurationByLineLength ? lineLength : 1.0;`,`float fShift;`,`if (continuous) {`,...l({duration:`duration`,startTimeOffset:`atom1.y`,repeatDelay:`atom1.z`,timeOriginSelector:`atom1.w`,easing:`atom2.y`,playAnimation:`atom2.z`,reverseAnimation:`atom2.w`,out:`fShift`}),`} else {`,...c({duration:`duration`,startTimeOffset:`atom1.y`,repeatDelay:`atom1.z`,timeOriginSelector:`atom1.w`,repeatType:`atom2.x`,easing:`atom2.y`,playAnimation:`atom2.z`,reverseAnimation:`atom2.w`,out:`fShift`}),`}`,`if (lineLength < 50.0) {`,` fShift = 0.0;`,`}`,`float aShift = mix(fromShift, toShift, fShift);`,`vec4 pShift = in0;`,`out0 = mod(aShift + pShift, lineLength);`]}encode(e){return[[this.opcode,e.shift.from,e.shift.to,0],...p(e.shift.timing),[+!!e.multiplyToByLineLength,+!!e.multiplyDurationByLineLength,+!!e.continuous,0]]}}const _={scalar:new r,vector3:new i,vector4:new a,animatedTransform:new m,animatedColor:new h,animatedShift:new g,ret:new n},v=4;function y(e){let t=[];t.push(`float globalTime = ${e.globalTime};`),t.push(`float localTimeOrigin = ${e.localTimeOrigin};`),t.push(`float lineLength = ${e.lineLength};`),t.push(`float globalRotation = ${e.globalRotation};`),t.push(`vec2 pointer = ${e.animationPointer};`),t.push(`vec2 size = ${e.animationTextureSize};`),t.push(`int top = 0;`),t.push(`vec4 stack[4];`),t.push(`for (int counter = 0; counter < 40; counter++) {`),t.push(`vec4 atom0 = texture(${e.animationTexture}, (pointer + 0.5) / size);`),t.push(`pointer.x += 1.0;`),t.push(`vec2 pixelDimensions = ${e.pixelDimensions};`),t.push(`if (false) {`);for(let n in _){let r=_[n];t.push(`} else if (int(atom0.x) == ${r.opcode}) {`);for(let n of r.generateSource(e))t.push(n)}return t.push(`} // End if-else.`),t.push(`} // End for.`),t.push(`${e.out} = top > 0 ? stack[top - 1] : vec4(0.0);`),t.join(`
|
|
12
12
|
`)}export{e as AAnimationInstruction,h as AnimatedColorInstruction,g as AnimatedShiftInstruction,m as AnimatedTransformInstruction,n as RetInstruction,r as ScalarInstruction,i as Vector3Instruction,a as Vector4Instruction,u as easingCodes,y as generateVirtualMachineSource,c as getTweenFactor,l as getUnclampedTweenFactor,_ as instructions,d as repeatTypeCodes,f as timeOriginSelectorCodes};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{pt2px as e}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as t}from"../../../../../../../geometry/GeometryCursor.js";import{
|
|
2
|
+
import{pt2px as e}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as t}from"../../../../../../../geometry/GeometryCursor.js";import{getUprightAngle as n}from"../../../../../../../symbols/cim/CIMCursor.js";import{maxTileCoordValue as r}from"../../../../../../../symbols/cim/constants.js";import{CIMMarkerPlacementHelper as i}from"../../../../../../../symbols/cim/placements/CIMMarkerPlacementHelper.js";import{spritePadding as a,tileSize as o}from"../../../definitions.js";import{AAnimatedMeshWriter as s}from"./AnimatedMeshWriter.js";import{angle as c,sizing as l,animationPointerAndBaseSizeAndReferenceSize as u,uv as d,offset as f,pos as p,bitset as m,id as h,lineLength as g,value1Position2Value2 as _,zoomRange as v}from"./attributes.js";import{clipWithVertexInterpolation as y}from"./clipping.js";import{createComputedAnimatedMeshParams as b}from"./ComputedAnimatedParams.js";function x(e,t){let n=[],r=0,i=0;for(;e.nextPath();){i=t?0:r,e.nextPoint();let{x:a,y:o}=e,s=[{x:a,y:o,attributes:[i]}];for(;e.nextPoint();){let{x:t,y:n}=e,r=t-a,c=n-o,l=Math.sqrt(r*r+c*c);i+=l,s.push({x:t,y:n,attributes:[i]}),a=t,o=n}s.length>1&&n.push(s),r=i}return{lineData:n,totalDistance:r}}class S extends s{get vertexSpec(){return{createComputedParams:b,optionalAttributes:{zoomRange:v,value1Position2Value2:_,lineLength:g},attributes:{id:h,bitset:m,pos:p,offset:f.marker,uv:d.marker,animationPointerAndBaseSizeAndReferenceSize:u,sizing:l,angle:c}}}_write(e,{target:n,effect:r}){let i=r?.geometry,{textureBinding:a}=this.evaluatedMeshParams.sprite;e.recordStart(this.instanceId,this.attributeLayout,a);let o=n.getDisplayId();if(this.shift&&n.geometryType===`esriGeometryPolyline`){if(!i){let r=t.fromFeatureSetReaderCIM(n);r&&this._writeParticles(e,n,r)}}else if(this.evaluatedMeshParams.placement!=null)this._writePlacedMarkers(e,n);else if(n.geometryType===`esriGeometryPolygon`){let t=n.readCentroidForDisplay();if(!t)return;let[r,i]=t.coords;this._writeQuad(e,o,r,i)}else if(n.geometryType===`esriGeometryPoint`){let t=n.readXForDisplay(),r=n.readYForDisplay();this._writeQuad(e,o,t,r)}else{let t=n.readGeometryForDisplay();t&&t.forEachVertex((t,n)=>{this._writeQuad(e,o,t,n)})}e.recordEnd()}_writePlacedMarkers(n,a){let o=t.fromFeatureSetReaderCIM(a)?.clone();if(!o)return;let s=i.getPlacement(o,-1,this.evaluatedMeshParams.placement,e(1),n.id);if(!s)return;let c=a.getDisplayId(),l=s.next(),u=null;for(;l!=null;){let e=l.tx,t=-l.ty;if(Math.abs(e)>r||Math.abs(t)>r){l=s.next();continue}let i=-l.getAngle();n.recordBounds(e,t,64,64),this.shift?u&&this._writeQuad(n,c,u[0],u[1],void 0,i):this._writeQuad(n,c,e,t,void 0,i),u=[e,t],l=s.next()}}_writeParticles(e,t,r){let i=t.getDisplayId(),{placement:a}=this.evaluatedMeshParams,s=a?.placePerPart??!1,c=this.evaluatedMeshParams.angleToLine&&a!=null&&`keepUpright`in a&&a.keepUpright,{lineData:l,totalDistance:u}=x(r,s);if(l.length===0)return;let d=this.evaluatedMeshParams.baseSize,f={x:-d,y:-d,width:o+2*d,height:o+2*d},p=a==null?0:`offset`in a?a.offset??0:0,m=l.flatMap(e=>{let t=s?e[e.length-1].attributes[0]:u;return C(y(e,f),t,p)});for(let{particles:t,lineLength:r}of m){let o=a=>{for(let o of t){let{a:t,b:s}=o,l=this.evaluatedMeshParams.angleToLine?Math.atan2(t.direction[1],t.direction[0]):0,u=c?n(l):null;this._writeQuad(e,i,t.position[0],t.position[1],[t.distance-a,s.position[0],s.position[1],s.distance-a],u??l,r,!0)}};if(!a||`placementTemplate`in a||a.type===`CIMMarkerPlacementOnVertices`){let e;if(a&&a.type!==`CIMMarkerPlacementOnVertices`)e=a.placementTemplate;else{e=[0];for(let n of t){let{a:t,b:r}=n,i=t.position[0]-r.position[0],a=t.position[1]-r.position[1],o=Math.sqrt(i*i+a*a);e.push(o)}}let n=-1*r;for(;n<2*r;)for(let t of e)n+=t,o(n)}else a.type===`CIMMarkerPlacementAtExtremities`?a.extremityPlacement===`JustBegin`?o(1):a.extremityPlacement===`JustEnd`?(o(r-1),o(-1)):a.extremityPlacement===`Both`&&(o(1),o(r-1)):a.type===`CIMMarkerPlacementOnLine`&&(a.relativeTo===`LineBeginning`?o(1):a.relativeTo===`LineEnd`?(o(r-1),o(-1)):a.relativeTo===`LineMiddle`&&o(r/2))}}_writeQuad(e,t,n,r,i,o=0,s=0,c=!1){let{rect:l}=this.evaluatedMeshParams.sprite,u=l.x+a,d=l.y+a,f=l.x+l.width-a,p=l.y+l.height-a,m=e.vertexCount();c||e.recordBounds(n,r,64,64);let h={texXmin:u,texYmin:d,texXmax:f,texYmax:p,value1Position2Value2:i,angle:o,lineLength:s};for(let i=0;i<4;i++)this._writeVertex(e,t,n,r,h);e.indexEnsureSize(6),e.indexWrite(m),e.indexWrite(m+1),e.indexWrite(m+2),e.indexWrite(m+1),e.indexWrite(m+3),e.indexWrite(m+2)}}function C(t,n,r){let i=[];for(let a of t){let t=[],{x:o,y:s}=a[0],c=a[0].attributes[0];for(let n=1;n<a.length;n++){let{x:i,y:l}=a[n],u=a[n].attributes[0],d=i-o,f=l-s,p=Math.sqrt(d*d+f*f);if(p>0)d/=p,f/=p;else continue;let m=0,h=0;if(r!==0){let t=e(r),n=f,i=-d;m=n*t,h=i*t}t.push({a:{position:[o+m,s+h],distance:c,direction:[d,f]},b:{position:[i+m,l+h],distance:u,direction:[d,f]}}),o=i,s=l,c=u}i.push({particles:t,lineLength:n})}return i}class w extends S{constructor(){super(...arguments),this.shift=!1}}class T extends S{constructor(){super(...arguments),this.shift=!0}}export{w as AnimatedMarkerMeshWriter,T as AnimatedMarkerShiftMeshWriter,x as convertToLineData};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import{EventedMixin as t}from"../../../core/Evented.js";import{property as n,subclass as r}from"../../../core/accessorSupport/decorators.js";import i from"../../../webscene/SunLighting.js";var a;let o=a=class extends t(i){static calculateTimezoneOffset({hours:e,minutes:t,seconds:n}){return Math.round(e+t/60+n/3600)}constructor(e){super(e),this.cameraTrackingEnabled=!0,this.globalIllumination
|
|
2
|
+
import{__decorate as e}from"tslib";import{EventedMixin as t}from"../../../core/Evented.js";import has from"../../../core/has.js";import{property as n,subclass as r}from"../../../core/accessorSupport/decorators.js";import i from"../../../webscene/SunLighting.js";var a;let o=a=class extends t(i){static calculateTimezoneOffset({hours:e,minutes:t,seconds:n}){return Math.round(e+t/60+n/3600)}constructor(e){super(e),this.cameraTrackingEnabled=!0,this.globalIllumination=has(`enable-feature:global-illumination`)??!1,this.positionTimezoneInfo={hours:0,minutes:0,seconds:0,autoUpdated:!0},this.type=`sun`;let t=new Date().getFullYear(),n=new Date(`March 15, `+t+` 12:00:00 UTC`);this._set(`defaultDate`,n),this._set(`date`,n)}get defaultDate(){return new Date(this._get(`defaultDate`))}static fromWebsceneLighting(e){return new a(e.cloneConstructProperties())}set defaultDate(e){let t=this._get(`date`)===this._get(`defaultDate`);e=new Date(e),this._set(`defaultDate`,e),t&&this._set(`date`,e)}set date(e){e!=null&&(this.positionTimezoneInfo.autoUpdated=!1,this._set(`date`,new Date(e)))}autoUpdate(e,t){let n=a.calculateTimezoneOffset(this.positionTimezoneInfo);this.positionTimezoneInfo.hours=t.hours,this.positionTimezoneInfo.minutes=t.minutes,this.positionTimezoneInfo.seconds=t.seconds;let r=null;e!=null&&(this.positionTimezoneInfo.autoUpdated=!0,isNaN(e.getTime())?(r=this.defaultDate.getTime(),this._set(`date`,this.defaultDate)):(r=this.date&&this.date.getTime(),this._set(`date`,new Date(e))));let i=a.calculateTimezoneOffset(this.positionTimezoneInfo);if(n!==i&&(s.target=this,s.timezoneOffset=i,this.emit(`timezone-will-change`,s),s.target=null),e!=null)return isNaN(e.getTime())||r!==e.getTime()}clone(){let e=this._get(`date`)===this._get(`defaultDate`),t=new a({...this.cloneConstructProperties(),...this.cloneNonPersistentConstructProperties(),defaultDate:this.defaultDate});return e&&t._set(`date`,t._get(`defaultDate`)),t.positionTimezoneInfo.autoUpdated=this.positionTimezoneInfo.autoUpdated,t.positionTimezoneInfo.hours=this.positionTimezoneInfo.hours,t.positionTimezoneInfo.minutes=this.positionTimezoneInfo.minutes,t.positionTimezoneInfo.seconds=this.positionTimezoneInfo.seconds,t}cloneWithWebsceneLighting(e){let t=this.clone();return e.date!=null&&(t.date=e.date),t.directShadowsEnabled=e.directShadowsEnabled,t.glow=e.glow?.clone(),t.displayUTCOffset=e.displayUTCOffset,t}cloneNonPersistentConstructProperties(){return{cameraTrackingEnabled:this.cameraTrackingEnabled,globalIllumination:this.globalIllumination}}};e([n({type:Boolean})],o.prototype,`cameraTrackingEnabled`,void 0),e([n({type:Boolean})],o.prototype,`globalIllumination`,void 0),e([n({type:Date})],o.prototype,`defaultDate`,null),e([n({type:Date})],o.prototype,`date`,null),e([n({readOnly:!0,type:[`sun`],json:{write:!0}})],o.prototype,`type`,void 0),o=a=e([r(`esri.views.3d.environment.SunLighting`)],o);const s={target:null,timezoneOffset:0},c=o;export{c as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import{EventedMixin as t}from"../../../core/Evented.js";import{property as n,subclass as r}from"../../../core/accessorSupport/decorators.js";import i from"../../../webscene/VirtualLighting.js";var a;let o=a=class extends t(i){constructor(e){super(e),this.cameraTrackingEnabled=!0,this.globalIllumination
|
|
2
|
+
import{__decorate as e}from"tslib";import{EventedMixin as t}from"../../../core/Evented.js";import has from"../../../core/has.js";import{property as n,subclass as r}from"../../../core/accessorSupport/decorators.js";import i from"../../../webscene/VirtualLighting.js";var a;let o=a=class extends t(i){constructor(e){super(e),this.cameraTrackingEnabled=!0,this.globalIllumination=has(`enable-feature:global-illumination`)??!1,this.type=`virtual`}clone(){return new a({...this.cloneConstructProperties(),...this.cloneNonPersistentConstructProperties()})}static fromWebsceneLighting(e){return new a(e.cloneConstructProperties())}cloneWithWebsceneLighting(e){let t=this.clone();return t.directShadowsEnabled=e.directShadowsEnabled,t.glow=e.glow?.clone(),t}cloneNonPersistentConstructProperties(){return{cameraTrackingEnabled:this.cameraTrackingEnabled,globalIllumination:this.globalIllumination}}};e([n({type:Boolean})],o.prototype,`cameraTrackingEnabled`,void 0),e([n({type:Boolean})],o.prototype,`globalIllumination`,void 0),e([n({readOnly:!0,type:[`virtual`],json:{write:{isRequired:!0}}})],o.prototype,`type`,void 0),o=a=e([r(`esri.views.3d.environment.VirtualLighting`)],o);const s=o;export{s as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import n from"../../../../core/Error.js";import{destroyMaybe as r}from"../../../../core/maybe.js";import{throwIfAborted as i,createAbortError as a}from"../../../../core/promiseUtils.js";import{difference as o}from"../../../../core/SetUtils.js";import{parseWhereClause as s}from"../../../../core/sql.js";import{property as c,subclass as l}from"../../../../core/accessorSupport/decorators.js";import{fromFeatureSetJSON as u}from"../../../../layers/graphics/dehydratedFeatures.js";import{canConvertSqlRelativeTime as d,sqlRelativeTimeToAbsolute as f}from"../../../../layers/support/relativeTimeQueryUtils.js";import{queueAutoPriority as
|
|
2
|
+
import{__decorate as e}from"tslib";import t from"../../../../core/Accessor.js";import n from"../../../../core/Error.js";import{destroyMaybe as r}from"../../../../core/maybe.js";import{throwIfAborted as i,createAbortError as a}from"../../../../core/promiseUtils.js";import{difference as o}from"../../../../core/SetUtils.js";import{parseWhereClause as s}from"../../../../core/sql.js";import{property as c,subclass as l}from"../../../../core/accessorSupport/decorators.js";import{fromFeatureSetJSON as u}from"../../../../layers/graphics/dehydratedFeatures.js";import{canConvertSqlRelativeTime as d,sqlRelativeTimeToAbsolute as f}from"../../../../layers/support/relativeTimeQueryUtils.js";import p from"../../../../layers/support/TimeInformation.js";import{queueAutoPriority as m}from"../../../../request/queue.js";import{runQuery as h,executeQuery as g,executeQueryForCount as _}from"../../../../rest/query/operations/query.js";import{PBFDecoder as v}from"../../support/PBFDecoder.js";let y=class extends t{constructor(e){super(e)}get implicitFields(){if(!this.layer.outFields?.includes(`*`))return new Set;let e=new Set(this.layerView.requiredFields),t=new Set(this.layerView.availableFields);return o(t,e)}async queryFeaturesDehydrated(e,t){let{layer:n}=this,r=n.capabilities,o=r?.query?.supportsFormatPBF,c=n.parsedUrl,l=d(e.where)?await f(n.fieldsIndex,e.where,r.query.relativeTimeBinWindow):e.where,p=e.where;l!==e.where&&(e=e.clone(),e.where=l);let m;if(o){this._decoder??=new v(this.controller);let r={sourceSpatialReference:n.spatialReference?.toJSON()??null,applyTransform:!0,maxStringAttributeFields:this.implicitFields,maxStringAttributeLength:C};m=await h(c,e,`pbf`,this._createRequestOptions(t),void 0,this._createLayerMetadata()).then(e=>(i(t),this._decoder==null?Promise.reject(a()):this._decoder.invoke({buffer:e,options:r},t.completeFeatureFromTransfer,t.signal)))}else m=await g(c,e,n.spatialReference,this._createRequestOptions(t),this._createLayerMetadata()).then(e=>u(e,{maxStringAttributeFields:this.implicitFields,maxStringAttributeLength:C}));if(p&&e.where!==p){let e=await this.controller.schedule(()=>s(p,this.layer.fieldsIndex),t.signal);m.features=await this.controller.schedule(()=>m.features.filter(t=>e.testFeatureCompiled(t)),t.signal)}return m}queryFeatureCount(e,t){return _(this.layer.parsedUrl,e,this._createRequestOptions(t),this._createLayerMetadata())}destroy(){this._decoder=r(this._decoder)}_createLayerMetadata(){let{layer:e}=this,{fieldsIndex:t}=e,n=`uniqueIdFields`in e?e.uniqueIdFields:void 0;return{timeInformation:new p({fieldsIndex:t,layer:e}),uniqueIdFields:n}}_createRequestOptions(e){return{...m,...e,query:{...this.layer.customParameters,token:this.layer.apiKey,...e?.query}}}};e([c({constructOnly:!0})],y.prototype,`layer`,void 0),e([c({constructOnly:!0})],y.prototype,`layerView`,void 0),e([c({constructOnly:!0})],y.prototype,`controller`,void 0),e([c({readOnly:!0})],y.prototype,`implicitFields`,null),y=e([l(`esri.views.3d.layers.support.featureTileQuery3D.FeatureTileServiceQuery3D`)],y);let b=class extends t{constructor(e){super(e)}queryFeaturesDehydrated(e,t){return this.layer.queryFeatures(e,t)}};e([c({constructOnly:!0})],b.prototype,`layer`,void 0),b=e([l(`esri.views.3d.layers.support.featureTileQuery3D.FeatureTileOGCServiceQuery3D`)],b);let x=class extends t{constructor(e){super(e)}queryFeaturesDehydrated(e,t){return this.layer.source.queryFeaturesJSON(e,t).then(u,n=>{if(n&&n.name===`query-features-json:unsupported`)return this.layer.queryFeatures(e,t);throw n})}queryFeatureCount(e,t){return this.layer.queryFeatureCount(e,t)}};e([c({constructOnly:!0})],x.prototype,`layer`,void 0),x=e([l(`esri.views.3d.layers.support.featureTileQuery3D.FeatureTileClientQuery3D`)],x);function S(e,t){let{layer:r}=e;switch(r.type){case`feature`:switch(r.source.type){case`feature-layer`:return new y({layer:r,layerView:e,controller:t});case`memory`:return new x({layer:r});case`csv`:case`geojson`:case`oriented-imagery`:case`wfs`:case`ogc-feature`:case`parquet`:break;default:r.source.type}break;case`catalog-footprint`:return new y({layer:r,layerView:e,controller:t});case`csv`:case`geojson`:case`oriented-imagery`:case`wfs`:return new x({layer:r});case`ogc-feature`:return new b({layer:r})}throw new n(`feature-layer:unsupported`,`Unsupported Feature layer type ${e.layer.type}:${e.layer.source.type}`)}const C=1024;export{S as createFeatureTileQuery3D};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
|
|
2
|
-
import{lerp as e}from"../../../../core/mathUtils.js";import t from"../../../../core/PooledArray.js";import{castRenderScreenPointArray3 as n,createRenderScreenPointArray3 as r,createScreenPointArray as i}from"../../../../core/screenUtils.js";import{getMetersPerVerticalUnitForSR as a}from"../../../../core/units.js";import{set as o}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{fromValues as s}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{add as c,normalize as l,dot as u,distance as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f,clone as p}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as m,copy as h,negativeInfinity as g,expandWithNestedArray as _}from"../../../../geometry/support/aaBoundingRect.js";import{createSpatialReferenceCyclical as v}from"../../../../geometry/support/normalizeUtils.js";import{create as y}from"../../../../geometry/support/ray.js";import{sv3d as b}from"../../../../geometry/support/vectorStacks.js";import{getElevationOffsetInMeters as x}from"../../../../support/elevationInfoUtils.js";import{g as S}from"../../../../chunks/cameraUtilsSpherical.js";import{computeMapPointFromVec3d as C}from"../../support/hitTest.js";import{fromRenderAtEye as w,fromScreen as T}from"../../support/geometryUtils/ray.js";import{defaultTolerance as E,Intersector as D,defaultScreenPolygonPrimitiveProcessor as O}from"../../webgl-engine/lib/Intersector.js";import{RayIntersectionQuery as k,DrapedScreenPolygonIntersectionQuery as A}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{isValidIntersectorResult as j}from"../../webgl-engine/lib/IntersectorResult.js";import{SliceScreenPolygonPrimitiveProcessor as M,createSliceExtrusionHalfspacePlanes as N,clipPolygonAgainstSlicedAwayHalfspaces as P,sliceFilterPredicate as F}from"../../webgl-engine/lib/intersectorUtils.js";import{prepareScreenPolygonIntersectionQuery as I}from"../../webgl-engine/lib/screenPolygonIntersectionUtils.js";import{TaskPriority as L}from"../../../support/Scheduler.js";class R{constructor(e,n,r){this.viewingMode=e,this._forEachLayer=n,this._view=r,this._externalIntersectionHandlers=new t,this._tolerance=E,this._tmpRay=y(),this._tmpRegion=m(),this._validateHUDIntersector=new D(this.viewingMode),this._validateHUDIntersector.options.hud=!1,this._screenPolygonIntersectionTask=this._view.resourceController.scheduler.registerTask(L.SCREEN_POLYGON_INTERSECTION)}destroy(){this._screenPolygonIntersectionTask.remove(),this._externalIntersectionHandlers.prune()}get screenPolygonIntersectionTask(){return this._screenPolygonIntersectionTask}intersectScreen(e,t,n){return this.intersectRay(this._getPickRay(e,this._tmpRay),H(this.viewingMode),t,n)}intersectScreenFreePointFallback(e,t,n){return this.intersectRayFreePointFallback(this._getPickRay(e,this._tmpRay),t,n)}intersectRayFreePointFallback(e,t,n){return this.intersectRay(e,H(this.viewingMode),t,n)||this._intersectRayFreePointLocal(e,t)}intersectRay(e,t,n,r){return t.options.selectionMode=!1,t.options.store=0,this.computeIntersection(e,t,!1,r),t.results.min?t.results.min.getIntersectionPoint(n):!1}getCenterRayWithSubpixelOffset(e,t,n=.5,r=.5){return e.getRenderCenter(Z,n,r),Z[0]+=.0466,Z[1]-=.0123,w(e,Z,t)}intersectIntersectorScreen(e,t,n){this.computeIntersection(this._getPickRay(e,this._tmpRay),t,!1,n)}async intersectIntersectorScreenPolygon(e,t,n){t.polygonResults.init();let r=this._view.state.camera,i=await I(r,e);i!=null&&await this._screenPolygonIntersectionTask.scheduleGenerator(e=>this._intersectIntersectorScreenPolygon(r,t,i,n,e))}*_intersectIntersectorScreenPolygon(e,t,n,r,i){let a=new U(r,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!r||!(`include`in r||`exclude`in r),t.camera=e,t.point=null,t.screenPolygonPrimitiveProcessor=O,yield*t.intersectScreenPolygon(a.layers,n);let o=this._view.slice.plane,s=o?new M(o):null;t.screenPolygonPrimitiveProcessor=s??O,yield*t.intersectScreenPolygon(a.sliceableLayers,n),t.screenPolygonPrimitiveProcessor=O,yield*this._intersectPolygonHandlersGenerator(t,a,n,null,s,void 0,!0,i),yield*this._intersectDrapedScreenPolygon(t,a,n,r),yield*t.intersectHUDScreenPolygon(a.layers,n),t.screenPolygonPrimitiveProcessor=s??O,yield*t.intersectHUDScreenPolygon(a.sliceableLayers,n),t.polygonResults.sortResults()}intersectToolIntersectorScreen(e,t,n){let r=this._getPickRay(e,this._tmpRay);this.intersectToolIntersectorRay(r,t,n)}intersectToolIntersectorRay(e,t,n){t.options.selectionMode=!0,this.computeIntersection(e,t,!1,n);let r=t.results.min;!this._view.groundView.opaque&&(!j(r)||r.intersector===7)&&(t.options.selectionMode=!1,this.computeIntersection(e,t,!1,n))}setTolerance(e=E){this._tolerance=e}addIntersectionHandler(e){this._externalIntersectionHandlers.push(e),this._externalIntersectionHandlers.sort((e,t)=>e.type===7?1:t.type===7?-1:0)}removeIntersectionHandler(e){this._externalIntersectionHandlers.removeUnordered(e)!=null&&this._externalIntersectionHandlers.sort((e,t)=>e.type===7?1:t.type===7?-1:0)}_getPickRay(e,t){let n=this._view.state.camera;return T(n,e,t)}_intersectRayFreePointLocal(e,t){return this.viewingMode!==2||e==null||c(t,e.origin,l(b.get(),e.direction)),!1}intersectElevationFromScreen(e,t,n=0,r=null){return this._intersectElevation(this._getPickRay(e,this._tmpRay),t,n,r)}_intersectElevation(e,t,r=0,i=null){if(e==null)return null;let o=this._view,{renderCoordsHelper:s}=o,c=a(o.spatialReference),d=t==null?`absolute-height`:t.mode,f=x(t)/c,p=(d===`on-the-ground`?0:f+r)*c/s.unitInMeters,{camera:m}=o.state;if(d===`absolute-height`){let t=s?.getAltitude(m.eye),n=u(l(K,e.direction),s.worldUpAtPosition(m.eye,q));if(t<p&&n<0||t>=p&&n>0)return null;if(s.intersectInfiniteManifold(e,p,K)){let e=C(o,K);return e.z??=0,e.z-=f,e}return null}let h=m.projectToRenderScreen(e.origin,n(b.get())),g=new U(null,this._forEachLayer),_=o.slice.plane,v=_?F(_):null,y=new D(this.viewingMode);y.options.store=0,y.options.verticalOffset=p,y.options.normalRequired=!1;let S=this._createRayIntersectionQuery(e,h,!1);y.reset(S.beginPoint,S.endPoint,m),y.point=h;let w=null;if(i&&`type`in i&&i.type===`graphics`){let e=o.allLayerViews.find(e=>e.layer===i)?.uid;w=e?t=>t.layerViewUid===e:null}else i&&(w=e=>e.graphicUid!==i.uid);switch(d){case`relative-to-scene`:y.intersect(g.layers,S.screenPoint,this._tolerance,null,e=>(!w||w(e))&&!!e.lastValidElevationBB),this._intersectRayHandlers(y,g,S,v,!1,e=>e.type===2||e.type===7||e.type===8,!1);break;case`on-the-ground`:case`relative-to-ground`:this._intersectRayHandlers(y,g,S,v,!1,e=>e.isGround,!1)}if(y.results.min.getIntersectionPoint(K)){let e=C(o,K);return e.z=r,e}return null}computeIntersection(e,t,r,i){if(e==null)return;let a=this._view.state.camera,o=a.projectToRenderScreen(e.origin,n(b.get())),s=new U(i,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!i||!(`include`in i||`exclude`in i);let c=this._createRayIntersectionQuery(e,o,r);t.reset(c.beginPoint,c.endPoint,a),t.intersect(s.layers,c.screenPoint,this._tolerance,null,s.objectFilter);let l=this._view.slice.plane,u=l?F(l):null;t.intersect(s.sliceableLayers,c.screenPoint,this._tolerance,u,s.objectFilter);let d=i&&(i.requiresGroundFeedback||i.enableDraped);this._intersectRayHandlers(t,s,c,u,!!d,e=>s.allowedIntersectorTypes==null||s.allowedIntersectorTypes.has(e.type));let f=b.get(),p=this._view,m=p.groundView.spatialReference;if(i&&i.enableDraped&&m!=null&&t.results.ground.getIntersectionPoint(f)){let e=p.overlayManager.renderer,n=p.renderCoordsHelper.spatialReference,r=b.get();p.renderCoordsHelper.fromRenderCoords(f,r,m),r[2]=p.elevationProvider?.getElevation(f[0],f[1],f[2],n,`ground`)??0,e.intersectRay(t,r,t.results.ground,e=>s.filterRenderGeometry(e))}t.sortResults(),this._processHUDResults(t)}_processHUDResults(e){let t=e.results.hud;h(this._tmpRegion,g);let n=[],r=this._tmpRegion,i=e=>{n.push(new z(e))};e.sortResults(t.all),t.min.distance!=null&&i(t.min);for(let e of t.all)t.min.target.object!==e.target.object&&t.max.target.object!==e.target.object&&i(e);if(t.max.distance!=null&&t.max.target.object!==t.min.target.object&&i(t.max),!n.length)return;r[0]===r[2]&&(r[2]+=1),r[1]===r[3]&&(r[3]+=1);let a=!0,o=e.results.max.distance==null,s=0;for(let t of n)a&&=(e.results.min.copy(t.result),!1),o&&e.results.max.copy(t.result),e.options.store===2&&e.results.all.splice(s++,0,t.result)}_createRayIntersectionQuery(e,t,n){return new k(e.origin,c(f(),e.origin,e.direction),t,n)}_intersectRayHandlers(e,t,n,r,i,a=()=>!0,o=!0){let{options:s}=e,c=s.isFiltered,l=s.filteredLayerViewUids;for(let{handler:c,filterPredicate:l,isFiltered:u,filteredLayerViewUids:d}of this._getFilteredIntersectionHandlers(t,r,null,a,o))(!u||c.isGround&&i)&&(s.isFiltered=u,s.filteredLayerViewUids=d,c.intersectRay(e,l,e.rayBegin,e.rayEnd,n.screenPoint,n.isVerticalRay));s.isFiltered=c,s.filteredLayerViewUids=l}*_intersectPolygonHandlersGenerator(e,t,n,r,i,a=()=>!0,o=!0,s){let{options:c}=e,l=c.isFiltered,u=c.filteredLayerViewUids,d=e.screenPolygonPrimitiveProcessor;for(let{handler:l,screenPolygonPrimitiveProcessor:u,isFiltered:d,filteredLayerViewUids:f}of this._getFilteredIntersectionHandlers(t,r,i,a,o))d||l.intersectScreenPolygon==null||(c.isFiltered=d,c.filteredLayerViewUids=f,e.screenPolygonPrimitiveProcessor=u??O,yield*l.intersectScreenPolygon(e,n,s));c.isFiltered=l,c.filteredLayerViewUids=u,e.screenPolygonPrimitiveProcessor=d}*_intersectDrapedScreenPolygon(e,t,n,r){let{basemapTerrain:i,overlayManager:a}=this._view,o=this._view.groundView.spatialReference!=null&&!a.renderer.isEmpty;if(!e.options.selectionMode||!r?.enableDraped||!o)return;let s=yield*this._createDrapedPolygonIntersectionQueries(n,i.slicePlaneEnabled?this._view.slice.plane:null);s!=null&&(yield*this._view.overlayManager.renderer.intersectScreenPolygon(e,s,e=>t.filterRenderGeometry(e)))}*_createDrapedPolygonIntersectionQueries(t,n){let{state:{camera:{eye:r}},pointsOfInterest:i}=this._view,a=this._view.groundView.spatialReference,c=[],l=n?[]:null,u=S(this._view,i.focus.renderLocation),f=v(a),m=1/0,h=null,g=K,_=q,y=e=>{if(!this._intersectDrapedScreenPolygonPoint(g,_,e))return!1;let t=h!=null&&f?h+f.shortestSignedDiff(h,g[0]):g[0];return h=t,c.push(s(t,g[1])),l&&l.push(p(_)),m=Math.min(m,d(r,_)),!0},{points:b}=t,{length:x}=b;for(let t=0;t<x;t++){let n=b[t],r=b[(t+1)%x];for(let t=0;t<u;t++){let i=t/u;if(!y(t===0?n:o(Y,e(n[0],r[0],i),e(n[1],r[1],i))))return null;yield}}if(!Number.isFinite(m))return null;if(n==null||!l)return[G(c,m)];let C=this._clipDrapedScreenPolygonIntersectionQueries(l,n,f,r);return C.length>0?C:null}_clipDrapedScreenPolygonIntersectionQueries(e,t,n,r){let i=[],a=N(t);for(let t of P(a,e)){let e=this._createDrapedQueryFromRenderPolygon(t,n,r);e!=null&&i.push(e)}return i.sort((e,t)=>e.distance-t.distance),i}_createDrapedQueryFromRenderPolygon(e,t,n){let{renderCoordsHelper:r}=this._view,i=this._view.groundView.spatialReference,a=[],o=1/0,c=null;for(let l of e){if(!r.fromRenderCoords(l,X,i))return null;let e=c!=null&&t?c+t.shortestSignedDiff(c,X[0]):X[0];c=e,a.push(s(e,X[1])),o=Math.min(o,d(n,l))}return a.length>=3&&Number.isFinite(o)?G(a,o):null}_intersectDrapedScreenPolygonPoint(e,t,n){let r=this._getPickRay(n,this._tmpRay);if(r==null)return!1;let{renderCoordsHelper:i}=this._view;this._intersectGroundPoint(t,r,n)||i.intersectManifoldClosestSilhouette(r,0,t);let a=this._view.groundView.spatialReference;return!!i.fromRenderCoords(t,e,a)}_intersectGroundPoint(e,t,n){let r=this._view.state.camera,i=new U(null,this._forEachLayer),a=new D(this.viewingMode);J[0]=n[0],J[1]=n[1],J[2]=0;let o=this._createRayIntersectionQuery(t,J,!1);return a.options.selectionMode=!0,a.options.store=0,a.options.normalRequired=!1,a.options.selectOpaqueTerrainOnly=!1,a.reset(o.beginPoint,o.endPoint,r),this._intersectRayHandlers(a,i,o,null,!0,e=>e.isGround,!1),a.results.ground.getIntersectionPoint(e)}*_getFilteredIntersectionHandlers(e,t,n,r=()=>!0,i=!0){for(let a of this._externalIntersectionHandlers){if(!r(a))continue;let o=!1,s=[];if(i){let t=a.layerViewUid,n=a.sublayerId,r=Array.isArray(t),i=r?t:[t],c=!1;for(let t of i)e.filterLayerViewUid(t,n)?c=!0:r&&s.push(t);o=!c}yield new B(a,a.slicePlaneEnabled?t:null,a.slicePlaneEnabled?n:null,o,s)}}}class z{constructor(e){this.result=e,this.screenPoint=r()}}class B{constructor(e,t,n,r,i){this.handler=e,this.filterPredicate=t,this.screenPolygonPrimitiveProcessor=n,this.isFiltered=r,this.filteredLayerViewUids=i}}let V;function H(e){return(!V||V.viewingMode!==e)&&(V=new D(e)),V}class U{constructor(e,t){this.layers=[],this.sliceableLayers=[],this.include=e?.include,this.exclude=e?.exclude,this.objectFilter=e?.objectFilter,this.allowedIntersectorTypes=e?.allowedIntersectorTypes,t(e=>{e.pickable&&this.filterLayerViewUid(e.apiLayerViewUid)&&(e.sliceable?this.sliceableLayers:this.layers).push(e)})}filterLayerViewUid(e,t){let{include:n,exclude:r}=this;if(e==null)return n==null&&r==null;let i=n instanceof Map?n.get(e)??!1:n?.has(e),a=r instanceof Map?r.get(e)??!1:r?.has(e);return(i==null||(typeof i==`boolean`?i:t!=null&&i.has(t)))&&(a==null||!(typeof a==`boolean`?a:t!=null&&a.has(t)))}filterRenderGeometry(e){return this.filterLayerViewUid(e.layerViewUid)}}function W(e){return typeof e==`object`&&!!e&&`intersectRay`in e}function G(e,t){return new A(e,_(m(g),e),t)}const K=f(),q=f(),J=r(),Y=i(),X=f(),Z=r();export{R as SceneIntersectionHelper,W as isIntersectionHandler};
|
|
2
|
+
import{lerp as e}from"../../../../core/mathUtils.js";import t from"../../../../core/PooledArray.js";import{castRenderScreenPointArray3 as n,createRenderScreenPointArray3 as r,createScreenPointArray as i}from"../../../../core/screenUtils.js";import{getMetersPerVerticalUnitForSR as a}from"../../../../core/units.js";import{set as o}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{fromValues as s}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{add as c,normalize as l,dot as u,distance as d}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f,clone as p}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{create as m,copy as h,negativeInfinity as g,expandWithNestedArray as _}from"../../../../geometry/support/aaBoundingRect.js";import{createSpatialReferenceCyclical as v}from"../../../../geometry/support/normalizeUtils.js";import{create as y}from"../../../../geometry/support/ray.js";import{sv3d as b}from"../../../../geometry/support/vectorStacks.js";import{getElevationOffsetInMeters as x}from"../../../../support/elevationInfoUtils.js";import{g as S}from"../../../../chunks/cameraUtilsSpherical.js";import{computeMapPointFromVec3d as C}from"../../support/hitTest.js";import{fromRenderAtEye as w,fromScreen as T}from"../../support/geometryUtils/ray.js";import{defaultTolerance as E,Intersector as D,defaultScreenPolygonPrimitiveProcessor as O}from"../../webgl-engine/lib/Intersector.js";import{RayIntersectionQuery as k,DrapedScreenPolygonIntersectionQuery as A}from"../../webgl-engine/lib/IntersectorInterfaces.js";import{isValidIntersectorResult as j}from"../../webgl-engine/lib/IntersectorResult.js";import{SliceScreenPolygonPrimitiveProcessor as M,createSliceExtrusionHalfspacePlanes as N,clipPolygonAgainstSlicedAwayHalfspaces as P,sliceFilterPredicate as F}from"../../webgl-engine/lib/intersectorUtils.js";import{prepareScreenPolygonIntersectionQuery as I}from"../../webgl-engine/lib/screenPolygonIntersectionUtils.js";import{TaskPriority as L}from"../../../support/Scheduler.js";class R{constructor(e,n,r){this.viewingMode=e,this._forEachLayer=n,this._view=r,this._externalIntersectionHandlers=new t,this._tolerance=E,this._tmpRay=y(),this._tmpRegion=m(),this._validateHUDIntersector=new D(this.viewingMode),this._validateHUDIntersector.options.hud=!1,this._screenPolygonIntersectionTask=this._view.resourceController.scheduler.registerTask(L.SCREEN_POLYGON_INTERSECTION)}destroy(){this._screenPolygonIntersectionTask.remove(),this._externalIntersectionHandlers.prune()}get screenPolygonIntersectionTask(){return this._screenPolygonIntersectionTask}intersectScreen(e,t,n){return this.intersectRay(this._getPickRay(e,this._tmpRay),H(this.viewingMode),t,n)}intersectScreenFreePointFallback(e,t,n){return this.intersectRayFreePointFallback(this._getPickRay(e,this._tmpRay),t,n)}intersectRayFreePointFallback(e,t,n){return this.intersectRay(e,H(this.viewingMode),t,n)||this._intersectRayFreePointLocal(e,t)}intersectRay(e,t,n,r){return t.options.selectionMode=!1,t.options.store=0,this.computeIntersection(e,t,!1,r),t.results.min?t.results.min.getIntersectionPoint(n):!1}getCenterRayWithSubpixelOffset(e,t,n=.5,r=.5){return e.getRenderCenter(Z,n,r),Z[0]+=.0466,Z[1]-=.0123,w(e,Z,t)}intersectIntersectorScreen(e,t,n){this.computeIntersection(this._getPickRay(e,this._tmpRay),t,!1,n)}async intersectIntersectorScreenPolygon(e,t,n){t.polygonResults.init();let r=this._view.state.camera,i=await I(r,e);i!=null&&await this._screenPolygonIntersectionTask.scheduleGenerator(e=>this._intersectIntersectorScreenPolygon(r,t,i,n,e))}*_intersectIntersectorScreenPolygon(e,t,n,r,i){let a=new U(r,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!r||!(`include`in r||`exclude`in r),t.camera=e,t.metersPerRenderUnit=this._view.renderCoordsHelper.unitInMeters,t.point=null,t.screenPolygonPrimitiveProcessor=O,yield*t.intersectScreenPolygon(a.layers,n);let o=this._view.slice.plane,s=o?new M(o):null;t.screenPolygonPrimitiveProcessor=s??O,yield*t.intersectScreenPolygon(a.sliceableLayers,n),t.screenPolygonPrimitiveProcessor=O,yield*this._intersectPolygonHandlersGenerator(t,a,n,null,s,void 0,!0,i),yield*this._intersectDrapedScreenPolygon(t,a,n,r),yield*t.intersectHUDScreenPolygon(a.layers,n),t.screenPolygonPrimitiveProcessor=s??O,yield*t.intersectHUDScreenPolygon(a.sliceableLayers,n),t.polygonResults.sortResults()}intersectToolIntersectorScreen(e,t,n){let r=this._getPickRay(e,this._tmpRay);this.intersectToolIntersectorRay(r,t,n)}intersectToolIntersectorRay(e,t,n){t.options.selectionMode=!0,this.computeIntersection(e,t,!1,n);let r=t.results.min;!this._view.groundView.opaque&&(!j(r)||r.intersector===7)&&(t.options.selectionMode=!1,this.computeIntersection(e,t,!1,n))}setTolerance(e=E){this._tolerance=e}addIntersectionHandler(e){this._externalIntersectionHandlers.push(e),this._externalIntersectionHandlers.sort((e,t)=>e.type===7?1:t.type===7?-1:0)}removeIntersectionHandler(e){this._externalIntersectionHandlers.removeUnordered(e)!=null&&this._externalIntersectionHandlers.sort((e,t)=>e.type===7?1:t.type===7?-1:0)}_getPickRay(e,t){let n=this._view.state.camera;return T(n,e,t)}_intersectRayFreePointLocal(e,t){return this.viewingMode!==2||e==null||c(t,e.origin,l(b.get(),e.direction)),!1}intersectElevationFromScreen(e,t,n=0,r=null){return this._intersectElevation(this._getPickRay(e,this._tmpRay),t,n,r)}_intersectElevation(e,t,r=0,i=null){if(e==null)return null;let o=this._view,{renderCoordsHelper:s}=o,c=a(o.spatialReference),d=t==null?`absolute-height`:t.mode,f=x(t)/c,p=(d===`on-the-ground`?0:f+r)*c/s.unitInMeters,{camera:m}=o.state;if(d===`absolute-height`){let t=s?.getAltitude(m.eye),n=u(l(K,e.direction),s.worldUpAtPosition(m.eye,q));if(t<p&&n<0||t>=p&&n>0)return null;if(s.intersectInfiniteManifold(e,p,K)){let e=C(o,K);return e.z??=0,e.z-=f,e}return null}let h=m.projectToRenderScreen(e.origin,n(b.get())),g=new U(null,this._forEachLayer),_=o.slice.plane,v=_?F(_):null,y=new D(this.viewingMode);y.options.store=0,y.options.verticalOffset=p,y.options.normalRequired=!1;let S=this._createRayIntersectionQuery(e,h,!1);y.metersPerRenderUnit=this._view.renderCoordsHelper.unitInMeters,y.reset(S.beginPoint,S.endPoint,m),y.point=h;let w=null;if(i&&`type`in i&&i.type===`graphics`){let e=o.allLayerViews.find(e=>e.layer===i)?.uid;w=e?t=>t.layerViewUid===e:null}else i&&(w=e=>e.graphicUid!==i.uid);switch(d){case`relative-to-scene`:y.intersect(g.layers,S.screenPoint,this._tolerance,null,e=>(!w||w(e))&&!!e.lastValidElevationBB),this._intersectRayHandlers(y,g,S,v,!1,e=>e.type===2||e.type===7||e.type===8,!1);break;case`on-the-ground`:case`relative-to-ground`:this._intersectRayHandlers(y,g,S,v,!1,e=>e.isGround,!1)}if(y.results.min.getIntersectionPoint(K)){let e=C(o,K);return e.z=r,e}return null}computeIntersection(e,t,r,i){if(e==null)return;let a=this._view.state.camera,o=a.projectToRenderScreen(e.origin,n(b.get())),s=new U(i,this._forEachLayer);t.options.selectOpaqueTerrainOnly=!i||!(`include`in i||`exclude`in i);let c=this._createRayIntersectionQuery(e,o,r);t.metersPerRenderUnit=this._view.renderCoordsHelper.unitInMeters,t.reset(c.beginPoint,c.endPoint,a),t.intersect(s.layers,c.screenPoint,this._tolerance,null,s.objectFilter);let l=this._view.slice.plane,u=l?F(l):null;t.intersect(s.sliceableLayers,c.screenPoint,this._tolerance,u,s.objectFilter);let d=i&&(i.requiresGroundFeedback||i.enableDraped);this._intersectRayHandlers(t,s,c,u,!!d,e=>s.allowedIntersectorTypes==null||s.allowedIntersectorTypes.has(e.type));let f=b.get(),p=this._view,m=p.groundView.spatialReference;if(i&&i.enableDraped&&m!=null&&t.results.ground.getIntersectionPoint(f)){let e=p.overlayManager.renderer,n=p.renderCoordsHelper.spatialReference,r=b.get();p.renderCoordsHelper.fromRenderCoords(f,r,m),r[2]=p.elevationProvider?.getElevation(f[0],f[1],f[2],n,`ground`)??0,e.intersectRay(t,r,t.results.ground,e=>s.filterRenderGeometry(e))}t.sortResults(),this._processHUDResults(t)}_processHUDResults(e){let t=e.results.hud;h(this._tmpRegion,g);let n=[],r=this._tmpRegion,i=e=>{n.push(new z(e))};e.sortResults(t.all),t.min.distance!=null&&i(t.min);for(let e of t.all)t.min.target.object!==e.target.object&&t.max.target.object!==e.target.object&&i(e);if(t.max.distance!=null&&t.max.target.object!==t.min.target.object&&i(t.max),!n.length)return;r[0]===r[2]&&(r[2]+=1),r[1]===r[3]&&(r[3]+=1);let a=!0,o=e.results.max.distance==null,s=0;for(let t of n)a&&=(e.results.min.copy(t.result),!1),o&&e.results.max.copy(t.result),e.options.store===2&&e.results.all.splice(s++,0,t.result)}_createRayIntersectionQuery(e,t,n){return new k(e.origin,c(f(),e.origin,e.direction),t,n)}_intersectRayHandlers(e,t,n,r,i,a=()=>!0,o=!0){let{options:s}=e,c=s.isFiltered,l=s.filteredLayerViewUids;for(let{handler:c,filterPredicate:l,isFiltered:u,filteredLayerViewUids:d}of this._getFilteredIntersectionHandlers(t,r,null,a,o))(!u||c.isGround&&i)&&(s.isFiltered=u,s.filteredLayerViewUids=d,c.intersectRay(e,l,e.rayBegin,e.rayEnd,n.screenPoint,n.isVerticalRay));s.isFiltered=c,s.filteredLayerViewUids=l}*_intersectPolygonHandlersGenerator(e,t,n,r,i,a=()=>!0,o=!0,s){let{options:c}=e,l=c.isFiltered,u=c.filteredLayerViewUids,d=e.screenPolygonPrimitiveProcessor;for(let{handler:l,screenPolygonPrimitiveProcessor:u,isFiltered:d,filteredLayerViewUids:f}of this._getFilteredIntersectionHandlers(t,r,i,a,o))d||l.intersectScreenPolygon==null||(c.isFiltered=d,c.filteredLayerViewUids=f,e.screenPolygonPrimitiveProcessor=u??O,yield*l.intersectScreenPolygon(e,n,s));c.isFiltered=l,c.filteredLayerViewUids=u,e.screenPolygonPrimitiveProcessor=d}*_intersectDrapedScreenPolygon(e,t,n,r){let{basemapTerrain:i,overlayManager:a}=this._view,o=this._view.groundView.spatialReference!=null&&!a.renderer.isEmpty;if(!e.options.selectionMode||!r?.enableDraped||!o)return;let s=yield*this._createDrapedPolygonIntersectionQueries(n,i.slicePlaneEnabled?this._view.slice.plane:null);s!=null&&(yield*this._view.overlayManager.renderer.intersectScreenPolygon(e,s,e=>t.filterRenderGeometry(e)))}*_createDrapedPolygonIntersectionQueries(t,n){let{state:{camera:{eye:r}},pointsOfInterest:i}=this._view,a=this._view.groundView.spatialReference,c=[],l=n?[]:null,u=S(this._view,i.focus.renderLocation),f=v(a),m=1/0,h=null,g=K,_=q,y=e=>{if(!this._intersectDrapedScreenPolygonPoint(g,_,e))return!1;let t=h!=null&&f?h+f.shortestSignedDiff(h,g[0]):g[0];return h=t,c.push(s(t,g[1])),l&&l.push(p(_)),m=Math.min(m,d(r,_)),!0},{points:b}=t,{length:x}=b;for(let t=0;t<x;t++){let n=b[t],r=b[(t+1)%x];for(let t=0;t<u;t++){let i=t/u;if(!y(t===0?n:o(Y,e(n[0],r[0],i),e(n[1],r[1],i))))return null;yield}}if(!Number.isFinite(m))return null;if(n==null||!l)return[G(c,m)];let C=this._clipDrapedScreenPolygonIntersectionQueries(l,n,f,r);return C.length>0?C:null}_clipDrapedScreenPolygonIntersectionQueries(e,t,n,r){let i=[],a=N(t);for(let t of P(a,e)){let e=this._createDrapedQueryFromRenderPolygon(t,n,r);e!=null&&i.push(e)}return i.sort((e,t)=>e.distance-t.distance),i}_createDrapedQueryFromRenderPolygon(e,t,n){let{renderCoordsHelper:r}=this._view,i=this._view.groundView.spatialReference,a=[],o=1/0,c=null;for(let l of e){if(!r.fromRenderCoords(l,X,i))return null;let e=c!=null&&t?c+t.shortestSignedDiff(c,X[0]):X[0];c=e,a.push(s(e,X[1])),o=Math.min(o,d(n,l))}return a.length>=3&&Number.isFinite(o)?G(a,o):null}_intersectDrapedScreenPolygonPoint(e,t,n){let r=this._getPickRay(n,this._tmpRay);if(r==null)return!1;let{renderCoordsHelper:i}=this._view;this._intersectGroundPoint(t,r,n)||i.intersectManifoldClosestSilhouette(r,0,t);let a=this._view.groundView.spatialReference;return!!i.fromRenderCoords(t,e,a)}_intersectGroundPoint(e,t,n){let r=this._view.state.camera,i=new U(null,this._forEachLayer),a=new D(this.viewingMode);J[0]=n[0],J[1]=n[1],J[2]=0;let o=this._createRayIntersectionQuery(t,J,!1);return a.options.selectionMode=!0,a.options.store=0,a.options.normalRequired=!1,a.options.selectOpaqueTerrainOnly=!1,a.reset(o.beginPoint,o.endPoint,r),this._intersectRayHandlers(a,i,o,null,!0,e=>e.isGround,!1),a.results.ground.getIntersectionPoint(e)}*_getFilteredIntersectionHandlers(e,t,n,r=()=>!0,i=!0){for(let a of this._externalIntersectionHandlers){if(!r(a))continue;let o=!1,s=[];if(i){let t=a.layerViewUid,n=a.sublayerId,r=Array.isArray(t),i=r?t:[t],c=!1;for(let t of i)e.filterLayerViewUid(t,n)?c=!0:r&&s.push(t);o=!c}yield new B(a,a.slicePlaneEnabled?t:null,a.slicePlaneEnabled?n:null,o,s)}}}class z{constructor(e){this.result=e,this.screenPoint=r()}}class B{constructor(e,t,n,r,i){this.handler=e,this.filterPredicate=t,this.screenPolygonPrimitiveProcessor=n,this.isFiltered=r,this.filteredLayerViewUids=i}}let V;function H(e){return(!V||V.viewingMode!==e)&&(V=new D(e)),V}class U{constructor(e,t){this.layers=[],this.sliceableLayers=[],this.include=e?.include,this.exclude=e?.exclude,this.objectFilter=e?.objectFilter,this.allowedIntersectorTypes=e?.allowedIntersectorTypes,t(e=>{e.pickable&&this.filterLayerViewUid(e.apiLayerViewUid)&&(e.sliceable?this.sliceableLayers:this.layers).push(e)})}filterLayerViewUid(e,t){let{include:n,exclude:r}=this;if(e==null)return n==null&&r==null;let i=n instanceof Map?n.get(e)??!1:n?.has(e),a=r instanceof Map?r.get(e)??!1:r?.has(e);return(i==null||(typeof i==`boolean`?i:t!=null&&i.has(t)))&&(a==null||!(typeof a==`boolean`?a:t!=null&&a.has(t)))}filterRenderGeometry(e){return this.filterLayerViewUid(e.layerViewUid)}}function W(e){return typeof e==`object`&&!!e&&`intersectRay`in e}function G(e,t){return new A(e,_(m(g),e),t)}const K=f(),q=f(),J=r(),Y=i(),X=f(),Z=r();export{R as SceneIntersectionHelper,W as isIntersectionHandler};
|