Skip to content

Releases: dymaptic/GeoBlazor

v4.6.1

23 Jun 17:41
2d4d554

Choose a tag to compare

Release v4.6.1

Highlights

  • Patch release for GeoBlazor Core with no public API changes or breaking changes.
  • Fixes ESBuild incremental checks so CI branch metadata does not force unnecessary rebuilds.
  • Fixes runtime layer updates for components backed by raw ArcGIS JavaScript objects, including SnappingOptions used by Pro widgets.

Bug Fixes

  • Fixed Core build script handling for ESBuild incremental checks so branch-name noise in CI does not invalidate JavaScript build state.
  • Fixed MapComponent.SetLayer so it no longer calls a missing setLayer method directly on raw ArcGIS objects. This resolves runtime failures seen when updating SnappingOptions after render, including calls such as SetEnabled(true) in a Sketch workflow.

Internal / Build / Tooling

  • Refreshed bundled GeoBlazor build-tool binaries for Windows, Linux, and macOS.
  • Synced develop from main before release so this PR includes the published v4.6.0 baseline.

What's Changed

Full Changelog: v4.6.0...v4.6.1

v4.6.0

22 Jun 23:45
9ff4348

Choose a tag to compare

Release v4.6.0

🐛 Bug Fixes

  • GeometryEngine.Union returns a populated result again. A regression in 4.5.1 caused Union to come back without its Extent (and in some paths as null). Union now returns the full unioned geometry with a populated Extent, so calls like view.GoTo(union.Extent) work as expected.
  • Layer-by-id binding now resolves after a late layer add. Components and widgets bound to a layer by id (for example SketchWidget with LayerId / GraphicsLayerId) now correctly resolve the layer and push it to the underlying ArcGIS JS object when the layer is added to the map after the component first renders.

✨ New Features

  • GetLayer() / SetLayer() on MapComponent. These are now available on the MapComponent base class, so any layer-bearing component can retrieve or set its layer at runtime (previously they were implemented per-component).

🧰 Internal / Build / Tooling

  • Test/CI harness reliability: build the test web app before launch (and fail fast if it doesn't start), build test projects in the correct configuration before --no-build launches, surface web-test failures, inject the ArcGIS API key into the test web app, fail the run when no tests execute, and avoid enum reflection when building test URLs.

What's Changed

Full Changelog: v4.5.4...v4.6.0

v4.5.4

19 Jun 18:17

Choose a tag to compare

What

Restores the runtime setter methods on SnappingOptions that were accidentally dropped in the 4.5.x line, plus regression guards.

Why

Commit c3ab36411 truncated SnappingOptions.gb.cs right after the property getters, deleting the entire Property Setters and collection-helper regions. That removed SetEnabled, SetGridEnabled, SetDistance, SetFeatureEnabled, SetSelfEnabled, SetAttributeRulesEnabled, and SetFeatureSources, so consumers can no longer toggle snapping / grid snapping at runtime (reported against 4.5.1). It's isolated to this one component and is still broken on develop and in 4.5.1–4.5.3.

Changes

  • Restore the complete SnappingOptions.gb.cs from f02afefeb (the commit immediately before the truncation) — re-adds exactly the 7 setters + the Add/Remove FeatureSources helpers and nothing else.
  • SnappingOptionsApiTests — public-API contract test so a future code-generation split can't silently drop these members again.
  • GeometryExtentSerializationTests + additions to GeometryEngineTests.TestUnion — guards for the separately-reported GeometryEngine.Union extent issue. That one is not reproducible from code (the union/extent path is identical to the working 4.4.4), so these lock in the behavior rather than fix a found bug.

Notes

  • Targets develop because the regression is present there too; also serves as the cut point for a 4.5.4 hotfix.
  • 11/11 unit tests pass; the browser test project compiles.

🤖 Generated with Claude Code

What's Changed

  • Restore SnappingOptions runtime setters (4.5.x regression) by @magmoe in #530
  • Bump lodash-es from 4.17.22 to 4.18.1 in /src/dymaptic.GeoBlazor.Core by @dependabot[bot] in #526
  • Bump flatted from 3.3.3 to 3.4.2 in /src/dymaptic.GeoBlazor.Core by @dependabot[bot] in #527
  • Bump minimatch, eslint, eslint-plugin-sonarjs and typescript-eslint in /src/dymaptic.GeoBlazor.Core by @dependabot[bot] in #528
  • Bump esbuild from 0.27.1 to 0.28.1 in /src/dymaptic.GeoBlazor.Core by @dependabot[bot] in #529
  • Bump protobufjs from 7.5.8 to 7.6.3 in /src/dymaptic.GeoBlazor.Core by @dependabot[bot] in #531
  • Release 4.5.4 by @TimPurdum in #532

Full Changelog: v4.5.3...v4.5.4

v4.5.3

10 Jun 21:35
abd661d

Choose a tag to compare

Bumps @protobufjs/utf8 from 1.1.0 to 1.1.1.

Release notes

Sourced from @​protobufjs/utf8's releases.

protobufjs-cli: v1.1.1

1.1.1 (2023-02-02)

Bug Fixes

  • cli: fix relative path to Google pb files (#1859) (e42eea4)
Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

What's Changed

Full Changelog: v4.5.2...v4.5.3

v4.5.2

09 Jun 17:03

Choose a tag to compare

Release v4.5.0


🚀 Highlights

  • Location services modernized — strongly-typed browser geolocation for the Locate widget, plus CancellationToken support and simplified optional-parameter signatures on LocationService.
  • Multipart geometry editingRemovePath / RemovePoint / RemoveRing now return dedicated, named result types.
  • Several breaking API changes to reviewGround moved namespaces, MapColor is now immutable, the Locate geolocation API is now strongly typed, and a few types were removed. See Breaking Changes.

✨ New Features

  • Strongly-typed browser geolocation for the Locate widget — new IGeolocationCoordinates, IGeolocationPosition, and PositionOptions types. LocateWidget.Locate() now returns an IGeolocationPosition? and GeolocationOptions is now a PositionOptions? (replacing the prior raw string? JSON). LocateWidget has also been reimplemented as a Razor component (LocateWidget.razor + LocateWidget.razor.cs).
  • CancellationToken support across LocationService geocoding methods (AddressesToLocations, AddressToLocations, LocationToAddress, SuggestLocations), with optional parameters replacing the prior overload stacks.
  • New CollectionChangeEvent<T> event type.
  • New enum membersDeconflictionStrategy (Static, Dynamic), SystemOrAreaUnit (SquareNauticalMiles), plus added members on HorizontalAlignment, VerticalAlignment, NoDataInterpretation, OrderBy, OutputPixelType, and SpatialRelationship.

🐛 Bug Fixes

  • MapColor.GetHashCode now hashes array contents instead of the array reference, fixing equality and dictionary-key behavior.
  • Widget ↔ layer connection reliability improvements (IMapComponent.Layer / View are now settable so layer-bound widgets reconnect correctly when a layer is added after the widget renders).
  • TypeScript interop: corrected invokeMethodAsync casing in a generated wrapper; light-theme styling fixes; SnappingOptions layer support and setProperty value sanitization.

⚠️ Breaking Changes

  • Content Types RenamedAttachmentsContent, ExpressionContent, FieldsContent, MediaContent, RelationshipContent, and TextContent have been removed, replaced by new AttachmentsPopupContent, ExpressionPopupContent, FieldsPopupContent, MediaPopupContent, RelationshipPopupContent, and TextPopupContent types.
  • Ground moved from dymaptic.GeoBlazor.Core.Model to dymaptic.GeoBlazor.Core.Components. It was also reworked: Layers, Loaded, NavigationConstraint, Opacity, and SurfaceColor are now settable; QueryElevation(Geometry) no longer takes an options argument; CreateElevationSampler's options argument is now optional; and When(...) now takes Action? callbacks instead of Func<Task>.
  • MapColor is now immutable. RgbaValues and HexOrNameValue are read-only (set at construction), and MapColor.Clone() has been removed.
  • Locate widget geolocation API is now strongly typed. Locate() returns IGeolocationPosition? (was string?), and GeolocationOptions / Get/SetGeolocationOptions use PositionOptions? (was string?). Code passing or parsing raw JSON strings must update.
  • GeometryEngine multipart-edit return types changed. RemovePath, RemovePoint (polyline & polygon), and RemoveRing now return dedicated records — RemovePathResult, RemovePointOnPolylineResult, RemovePointOnPolygonResult, RemoveRingResult — instead of value tuples. Callers destructuring the old tuples must update.
  • LocationService overloads consolidated into single methods with optional parameters. Call sites using named/positional arguments generally remain source-compatible; code bound to a specific overload signature (or via reflection) must be updated.
  • LocateWidget converted from a code-only class to a Razor component (LocateWidget.cs removed in favor of LocateWidget.razor / .razor.cs).
  • MissingMapViewReferenceException removed.
  • IAttributeTableTemplateElements interface removed (replaced by AttributeTableTemplateElement).

🧰 Internal / Build / Tooling

  • Sample apps moved out to the dedicated GeoBlazor-Samples repository.
  • ESBuild now runs via an MSBuild project (dymaptic.GeoBlazor.Core.ESBuild.csproj) replacing the ESBuildLauncher source generator.
  • New Roslyn analyzers: ParameterConversionAnalyzer and GeoBlazorParameterAssignmentSuppressor.
  • Cross-platform build support (win-x64 / linux-x64 / osx-arm64), atomic ESBuild locking, single ESBuild run per build, and a RemoveStaleJsContent target to avoid stale JS/map build errors.
  • .editorconfig moved to the repo root; solution migrated from .sln to .slnx; .dockerignore and .gitattributes added.
  • Docker build-caching and test-infrastructure improvements; committed Core package-lock.json so npm ci works in CI; fixed hung test runs.

Full Changelog: v4.5.1...v4.5.2

v4.5.1

09 Jun 15:44

Choose a tag to compare

Release v4.5.0


🚀 Highlights

  • Location services modernized — strongly-typed browser geolocation for the Locate widget, plus CancellationToken support and simplified optional-parameter signatures on LocationService.
  • Multipart geometry editingRemovePath / RemovePoint / RemoveRing now return dedicated, named result types.
  • Several breaking API changes to reviewGround moved namespaces, MapColor is now immutable, the Locate geolocation API is now strongly typed, and a few types were removed. See Breaking Changes.

✨ New Features

  • Strongly-typed browser geolocation for the Locate widget — new IGeolocationCoordinates, IGeolocationPosition, and PositionOptions types. LocateWidget.Locate() now returns an IGeolocationPosition? and GeolocationOptions is now a PositionOptions? (replacing the prior raw string? JSON). LocateWidget has also been reimplemented as a Razor component (LocateWidget.razor + LocateWidget.razor.cs).
  • CancellationToken support across LocationService geocoding methods (AddressesToLocations, AddressToLocations, LocationToAddress, SuggestLocations), with optional parameters replacing the prior overload stacks.
  • New CollectionChangeEvent<T> event type.
  • New enum membersDeconflictionStrategy (Static, Dynamic), SystemOrAreaUnit (SquareNauticalMiles), plus added members on HorizontalAlignment, VerticalAlignment, NoDataInterpretation, OrderBy, OutputPixelType, and SpatialRelationship.

🐛 Bug Fixes

  • MapColor.GetHashCode now hashes array contents instead of the array reference, fixing equality and dictionary-key behavior.
  • Widget ↔ layer connection reliability improvements (IMapComponent.Layer / View are now settable so layer-bound widgets reconnect correctly when a layer is added after the widget renders).
  • TypeScript interop: corrected invokeMethodAsync casing in a generated wrapper; light-theme styling fixes; SnappingOptions layer support and setProperty value sanitization.

⚠️ Breaking Changes

  • Content Types RenamedAttachmentsContent, ExpressionContent, FieldsContent, MediaContent, RelationshipContent, and TextContent have been removed, replaced by new AttachmentsPopupContent, ExpressionPopupContent, FieldsPopupContent, MediaPopupContent, RelationshipPopupContent, and TextPopupContent types.
  • Ground moved from dymaptic.GeoBlazor.Core.Model to dymaptic.GeoBlazor.Core.Components. It was also reworked: Layers, Loaded, NavigationConstraint, Opacity, and SurfaceColor are now settable; QueryElevation(Geometry) no longer takes an options argument; CreateElevationSampler's options argument is now optional; and When(...) now takes Action? callbacks instead of Func<Task>.
  • MapColor is now immutable. RgbaValues and HexOrNameValue are read-only (set at construction), and MapColor.Clone() has been removed.
  • Locate widget geolocation API is now strongly typed. Locate() returns IGeolocationPosition? (was string?), and GeolocationOptions / Get/SetGeolocationOptions use PositionOptions? (was string?). Code passing or parsing raw JSON strings must update.
  • GeometryEngine multipart-edit return types changed. RemovePath, RemovePoint (polyline & polygon), and RemoveRing now return dedicated records — RemovePathResult, RemovePointOnPolylineResult, RemovePointOnPolygonResult, RemoveRingResult — instead of value tuples. Callers destructuring the old tuples must update.
  • LocationService overloads consolidated into single methods with optional parameters. Call sites using named/positional arguments generally remain source-compatible; code bound to a specific overload signature (or via reflection) must be updated.
  • LocateWidget converted from a code-only class to a Razor component (LocateWidget.cs removed in favor of LocateWidget.razor / .razor.cs).
  • MissingMapViewReferenceException removed.
  • IAttributeTableTemplateElements interface removed (replaced by AttributeTableTemplateElement).

🧰 Internal / Build / Tooling

  • Sample apps moved out to the dedicated GeoBlazor-Samples repository.
  • ESBuild now runs via an MSBuild project (dymaptic.GeoBlazor.Core.ESBuild.csproj) replacing the ESBuildLauncher source generator.
  • New Roslyn analyzers: ParameterConversionAnalyzer and GeoBlazorParameterAssignmentSuppressor.
  • Cross-platform build support (win-x64 / linux-x64 / osx-arm64), atomic ESBuild locking, single ESBuild run per build, and a RemoveStaleJsContent target to avoid stale JS/map build errors.
  • .editorconfig moved to the repo root; solution migrated from .sln to .slnx; .dockerignore and .gitattributes added.
  • Docker build-caching and test-infrastructure improvements; committed Core package-lock.json so npm ci works in CI; fixed hung test runs.

Full Changelog: v4.5.0...v4.5.1

v4.5.0

09 Jun 14:59
3efc760

Choose a tag to compare

Release v4.5.0


🚀 Highlights

  • Location services modernized — strongly-typed browser geolocation for the Locate widget, plus CancellationToken support and simplified optional-parameter signatures on LocationService.
  • Multipart geometry editingRemovePath / RemovePoint / RemoveRing now return dedicated, named result types.
  • Several breaking API changes to reviewGround moved namespaces, MapColor is now immutable, the Locate geolocation API is now strongly typed, and a few types were removed. See Breaking Changes.

✨ New Features

  • Strongly-typed browser geolocation for the Locate widget — new IGeolocationCoordinates, IGeolocationPosition, and PositionOptions types. LocateWidget.Locate() now returns an IGeolocationPosition? and GeolocationOptions is now a PositionOptions? (replacing the prior raw string? JSON). LocateWidget has also been reimplemented as a Razor component (LocateWidget.razor + LocateWidget.razor.cs).
  • CancellationToken support across LocationService geocoding methods (AddressesToLocations, AddressToLocations, LocationToAddress, SuggestLocations), with optional parameters replacing the prior overload stacks.
  • New CollectionChangeEvent<T> event type.
  • New enum membersDeconflictionStrategy (Static, Dynamic), SystemOrAreaUnit (SquareNauticalMiles), plus added members on HorizontalAlignment, VerticalAlignment, NoDataInterpretation, OrderBy, OutputPixelType, and SpatialRelationship.

🐛 Bug Fixes

  • MapColor.GetHashCode now hashes array contents instead of the array reference, fixing equality and dictionary-key behavior.
  • Widget ↔ layer connection reliability improvements (IMapComponent.Layer / View are now settable so layer-bound widgets reconnect correctly when a layer is added after the widget renders).
  • TypeScript interop: corrected invokeMethodAsync casing in a generated wrapper; light-theme styling fixes; SnappingOptions layer support and setProperty value sanitization.

⚠️ Breaking Changes

  • Content Types RenamedAttachmentsContent, ExpressionContent, FieldsContent, MediaContent, RelationshipContent, and TextContent have been removed, replaced by new AttachmentsPopupContent, ExpressionPopupContent, FieldsPopupContent, MediaPopupContent, RelationshipPopupContent, and TextPopupContent types.
  • Ground moved from dymaptic.GeoBlazor.Core.Model to dymaptic.GeoBlazor.Core.Components. It was also reworked: Layers, Loaded, NavigationConstraint, Opacity, and SurfaceColor are now settable; QueryElevation(Geometry) no longer takes an options argument; CreateElevationSampler's options argument is now optional; and When(...) now takes Action? callbacks instead of Func<Task>.
  • MapColor is now immutable. RgbaValues and HexOrNameValue are read-only (set at construction), and MapColor.Clone() has been removed.
  • Locate widget geolocation API is now strongly typed. Locate() returns IGeolocationPosition? (was string?), and GeolocationOptions / Get/SetGeolocationOptions use PositionOptions? (was string?). Code passing or parsing raw JSON strings must update.
  • GeometryEngine multipart-edit return types changed. RemovePath, RemovePoint (polyline & polygon), and RemoveRing now return dedicated records — RemovePathResult, RemovePointOnPolylineResult, RemovePointOnPolygonResult, RemoveRingResult — instead of value tuples. Callers destructuring the old tuples must update.
  • LocationService overloads consolidated into single methods with optional parameters. Call sites using named/positional arguments generally remain source-compatible; code bound to a specific overload signature (or via reflection) must be updated.
  • LocateWidget converted from a code-only class to a Razor component (LocateWidget.cs removed in favor of LocateWidget.razor / .razor.cs).
  • MissingMapViewReferenceException removed.
  • IAttributeTableTemplateElements interface removed (replaced by AttributeTableTemplateElement).

🧰 Internal / Build / Tooling

  • Sample apps moved out to the dedicated GeoBlazor-Samples repository.
  • ESBuild now runs via an MSBuild project (dymaptic.GeoBlazor.Core.ESBuild.csproj) replacing the ESBuildLauncher source generator.
  • New Roslyn analyzers: ParameterConversionAnalyzer and GeoBlazorParameterAssignmentSuppressor.
  • Cross-platform build support (win-x64 / linux-x64 / osx-arm64), atomic ESBuild locking, single ESBuild run per build, and a RemoveStaleJsContent target to avoid stale JS/map build errors.
  • .editorconfig moved to the repo root; solution migrated from .sln to .slnx; .dockerignore and .gitattributes added.
  • Docker build-caching and test-infrastructure improvements; committed Core package-lock.json so npm ci works in CI; fixed hung test runs.

What's Changed

Full Changelog: v4.4.4...v4.5.0

v4.4.4

12 Jan 23:12
8ddc224

Choose a tag to compare

null

What's Changed

Full Changelog: v4.4.3...v4.4.4

v4.4.3

12 Jan 22:09

Choose a tag to compare

Bug fix #505 for "A task was cancelled" exception on async MapView property queries (e.g., await view.GetExtent()) after 60 seconds interacting with a map.

What's Changed

Full Changelog: v4.4.0...v4.4.3

v4.4.2

09 Jan 19:48

Choose a tag to compare

No changes, patch release to fix build error for Pro NuGetPackage

What's Changed

Full Changelog: v4.3.0...v4.4.2