From 3073dab2b7811a44f7513f3b37dfaef65b13401b Mon Sep 17 00:00:00 2001 From: timpurdum Date: Thu, 12 Feb 2026 08:49:06 -0600 Subject: [PATCH 1/5] Update widgets with late-added layers --- Directory.Build.props | 2 +- .../Components/Layers/Layer.cs | 2 +- .../Components/MapComponent.razor.cs | 15 +++++- .../Components/Views/MapView.razor.cs | 49 ++++++++++++------- .../Components/Widgets/Widget.razor.cs | 19 ++++++- .../Components/TestRunnerBase.razor.cs | 6 ++- 6 files changed, 68 insertions(+), 25 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 949a79009..3a05026a2 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,7 +6,7 @@ enable enable true - 5.0.0.75 + 5.0.0.76 Debug;Release;SourceGen Highlighting AnyCPU true diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs index eafe7685d..c76a3ebfe 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs @@ -446,7 +446,7 @@ public async Task UpdateLayer() _delayedUpdate = false; // ReSharper disable once RedundantCast - await JsComponentReference!.InvokeAsync("updateComponent", CancellationTokenSource.Token, + await JsComponentReference.InvokeAsync("updateComponent", CancellationTokenSource.Token, (object)this); } diff --git a/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs index 587f6ae31..0289497fa 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs @@ -123,7 +123,7 @@ public Guid? ViewId /// The Id of the relevant Layer for the MapComponent. Not always applicable to every component type. /// [Parameter] - public Guid? LayerId { get; set; } + public virtual Guid? LayerId { get; set; } /// /// Indicates the visibility of the component. Default value: true. @@ -884,6 +884,17 @@ protected override async Task OnInitializedAsync() } } + protected override void OnParametersSet() + { + base.OnParametersSet(); + LayerId ??= Layer?.Id; + Layer ??= Parent?.Layer; + View ??= Parent?.View; + CoreJsModule ??= Parent?.CoreJsModule; + ProJsModule ??= Parent?.ProJsModule; + } + + /// protected override async Task OnAfterRenderAsync(bool firstRender) { @@ -1087,7 +1098,7 @@ private void CopyProperty(PropertyInfo prop, MapComponent deserializedComponent) /// /// Previously updated parent components /// - protected internal void UpdateGeoBlazorReferences(IJSObjectReference coreJsModule, IJSObjectReference? proJsModule, + protected virtual internal void UpdateGeoBlazorReferences(IJSObjectReference coreJsModule, IJSObjectReference? proJsModule, MapView? view, MapComponent? parent, Layer? layer, int depth = 0, HashSet? visited = null) { visited ??= new HashSet(); diff --git a/src/dymaptic.GeoBlazor.Core/Components/Views/MapView.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/Views/MapView.razor.cs index 667b7c5b5..723c50e98 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Views/MapView.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Views/MapView.razor.cs @@ -280,7 +280,7 @@ public async Task OnJavascriptError(JavascriptError error) if (IsDisposed) return; #if DEBUG ErrorMessage = error.Message?.Replace("\n", "
") ?? error.Stack; - StateHasChanged(); + await InvokeAsync(StateHasChanged); #endif var exception = new JavascriptException(error); @@ -1216,14 +1216,12 @@ public async Task OnJavascriptLayerViewCreateError(LayerViewCreateErrorEvent err #region Public Methods /// - public override ValueTask Refresh() + public override async ValueTask Refresh() { NeedsRender = true; ExtentSetByCode = false; ExtentChangedInJs = false; - StateHasChanged(); - - return ValueTask.CompletedTask; + await InvokeAsync(StateHasChanged); } /// @@ -1234,7 +1232,7 @@ public void Load() { _renderCalled = true; NeedsRender = true; - StateHasChanged(); + InvokeAsync(StateHasChanged); } /// @@ -1525,7 +1523,7 @@ public async Task ClearGraphics() /// /// If true, adds the layer as a Basemap Reference Layer. /// - public Task AddLayer(Layer layer, bool isBasemapLayer = false, bool isBasemapReferenceLayer = false) + public async Task AddLayer(Layer layer, bool isBasemapLayer = false, bool isBasemapReferenceLayer = false) { if (isBasemapLayer && layer.IsBasemapReferenceLayer != true) { @@ -1553,12 +1551,13 @@ public Task AddLayer(Layer layer, bool isBasemapLayer = false, bool isBasemapRef layer.View ??= this; - if (CoreJsModule is null || !MapRendered) return Task.CompletedTask; + if (CoreJsModule is null || !MapRendered) + { + return; + } _newLayers.Add((layer, isBasemapLayer, isBasemapReferenceLayer)); - StateHasChanged(); - - return Task.CompletedTask; + await InvokeAsync(StateHasChanged); } /// @@ -2353,7 +2352,7 @@ public void OnJavascriptHitTestResult(Guid eventId, string chunk) /// /// Adds a widget to the view. /// - public Task AddWidget(Widget widget) + public async Task AddWidget(Widget widget) { if (!_widgets.Contains(widget)) { @@ -2361,12 +2360,13 @@ public Task AddWidget(Widget widget) widget.UpdateGeoBlazorReferences(CoreJsModule!, ProJsModule, View, this, null); } - if (CoreJsModule is null || !widget.ArcGISWidget || !MapRendered) return Task.CompletedTask; + if (CoreJsModule is null || !widget.ArcGISWidget || !MapRendered) + { + return; + } _newWidgets.Add(widget); - StateHasChanged(); - - return Task.CompletedTask; + await InvokeAsync(StateHasChanged); } /// @@ -2538,7 +2538,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) catch (Exception ex) { ErrorMessage = ex.Message; - StateHasChanged(); + await InvokeAsync(StateHasChanged); throw; } @@ -2583,7 +2583,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } _firstRenderComplete = true; - StateHasChanged(); + await InvokeAsync(StateHasChanged); return; } @@ -2600,6 +2600,8 @@ protected override async Task OnAfterRenderAsync(bool firstRender) if (MapRendered) { + // layers added in code can have race conditions that require another render before adding to the map, + // so we store them in AddLayer and then add them here after the main render if (_newLayers.Any()) { (Layer Layer, bool IsBasemapLayer, bool IsBasemapReferenceLayer)[] newLayers = _newLayers.ToArray(); @@ -2609,6 +2611,17 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { await CoreJsModule!.InvokeVoidAsync("addLayer", CancellationTokenSource.Token, (object)newLayer, Map?.Id, Id, isBasemapLayer, isBasemapReferenceLayer); + + // this updates widgets that were assigned a LayerId instead of a Layer + if (_widgets.Where(w => w.LayerId == newLayer.Id).ToList() is { Count: > 0 } widgetMatches) + { + foreach (Widget widget in widgetMatches) + { + // set layer to null forces widget to update and call JavaScript + widget.Layer = null; + widget.UpdateGeoBlazorReferences(CoreJsModule!, ProJsModule, this, this, newLayer); + } + } } } diff --git a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs index c02c5dee5..e6ce48265 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs @@ -454,6 +454,21 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } } + protected internal override void UpdateGeoBlazorReferences(IJSObjectReference coreJsModule, IJSObjectReference? proJsModule, + MapView? view, MapComponent? parent, Layer? layer, int depth = 0, HashSet? visited = null) + { + bool needsUpdate = false; + if (layer is not null && layer.Id != Layer?.Id) + { + needsUpdate = true; + } + base.UpdateGeoBlazorReferences(coreJsModule, proJsModule, view, parent, layer, depth, visited); + if (needsUpdate) + { + _ = Task.Run(async () => await UpdateWidget()); + } + } + /// /// Updates the widget internally. Not intended for public use. /// @@ -477,7 +492,7 @@ protected async Task UpdateWidget() try { - JsComponentReference ??= await CoreJsModule!.InvokeAsync( + JsComponentReference ??= await CoreJsModule.InvokeAsync( "getJsComponent", CancellationTokenSource.Token, Id); } catch @@ -491,7 +506,7 @@ protected async Task UpdateWidget() } // ReSharper disable once RedundantCast - await JsComponentReference!.InvokeVoidAsync("updateComponent", CancellationTokenSource.Token, (object)this); + await JsComponentReference.InvokeVoidAsync("updateComponent", CancellationTokenSource.Token, (object)this); } private bool _externalWidgetRegistered; diff --git a/test/dymaptic.GeoBlazor.Core.Test.Blazor.Shared/Components/TestRunnerBase.razor.cs b/test/dymaptic.GeoBlazor.Core.Test.Blazor.Shared/Components/TestRunnerBase.razor.cs index b1b49ce90..74e2c13f0 100644 --- a/test/dymaptic.GeoBlazor.Core.Test.Blazor.Shared/Components/TestRunnerBase.razor.cs +++ b/test/dymaptic.GeoBlazor.Core.Test.Blazor.Shared/Components/TestRunnerBase.razor.cs @@ -24,7 +24,7 @@ public TestRunnerBase() var retryStrategyOptions = new RetryStrategyOptions { BackoffType = DelayBackoffType.Exponential, - MaxRetryAttempts = 3, + MaxRetryAttempts = 2, // one retry is usually plenty, two just in case Delay = TimeSpan.FromSeconds(1), ShouldHandle = new PredicateBuilder().Handle(ex => !ex.Message.Contains("Invalid GeoBlazor registration key") @@ -34,6 +34,10 @@ public TestRunnerBase() && !ex.Message.Contains("Map component view is in an invalid state")), OnRetry = async args => { + if (args.Context.OperationKey is null) + { + return; + } await CleanupTest(args.Context.OperationKey!, true); _testResults[args.Context.OperationKey!] = $"Attempt {args.AttemptNumber + 1} failed. Retrying..."; } From 65ce64ec17f810b43a5d986f1ea511f115cfd318 Mon Sep 17 00:00:00 2001 From: timpurdum Date: Thu, 12 Feb 2026 09:12:48 -0600 Subject: [PATCH 2/5] add missing xml comments --- src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs | 1 + src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs index 0289497fa..c06259794 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/MapComponent.razor.cs @@ -884,6 +884,7 @@ protected override async Task OnInitializedAsync() } } + /// protected override void OnParametersSet() { base.OnParametersSet(); diff --git a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs index e6ce48265..028bd414b 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs @@ -454,6 +454,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } } + /// protected internal override void UpdateGeoBlazorReferences(IJSObjectReference coreJsModule, IJSObjectReference? proJsModule, MapView? view, MapComponent? parent, Layer? layer, int depth = 0, HashSet? visited = null) { From c29ed785a2cf3d49731a44c42786f8be559a1e5c Mon Sep 17 00:00:00 2001 From: "submodule-validation-for-geoblazor[bot]" <235551211+submodule-validation-for-geoblazor[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 15:18:17 +0000 Subject: [PATCH 3/5] Pipeline Build Commit of Version and Docs --- Directory.Build.props | 2 +- build-tools/linux-x64/BuildAppSettings | Bin 78256 -> 78256 bytes build-tools/linux-x64/BuildAppSettings.dll | Bin 9728 -> 9728 bytes build-tools/linux-x64/BuildTemplates | Bin 78256 -> 78256 bytes build-tools/linux-x64/BuildTemplates.dll | Bin 24576 -> 24576 bytes build-tools/linux-x64/ConsoleDialog | Bin 78256 -> 78256 bytes build-tools/linux-x64/ConsoleDialog.dll | Bin 12288 -> 12288 bytes build-tools/linux-x64/ESBuild | Bin 78256 -> 78256 bytes build-tools/linux-x64/ESBuild.dll | Bin 18944 -> 18944 bytes build-tools/linux-x64/ESBuildClearLocks | Bin 78256 -> 78256 bytes build-tools/linux-x64/ESBuildClearLocks.dll | Bin 7168 -> 7168 bytes build-tools/linux-x64/FetchNuGetVersion | Bin 78256 -> 78256 bytes build-tools/linux-x64/FetchNuGetVersion.dll | Bin 8192 -> 8192 bytes build-tools/linux-x64/GBTest | Bin 78256 -> 78256 bytes build-tools/linux-x64/GBTest.dll | Bin 15872 -> 15872 bytes build-tools/linux-x64/RazorCopy | Bin 78256 -> 78256 bytes build-tools/linux-x64/RazorCopy.dll | Bin 9728 -> 9728 bytes build-tools/linux-x64/Utilities.dll | Bin 4608 -> 4608 bytes 18 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 3a05026a2..a33157691 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,7 +6,7 @@ enable enable true - 5.0.0.76 + 5.0.0.77 Debug;Release;SourceGen Highlighting AnyCPU true diff --git a/build-tools/linux-x64/BuildAppSettings b/build-tools/linux-x64/BuildAppSettings index 45ce8ddd230d3d024b08a790b3c67ba031b0f85e..e9b810ae0c2c8069b49b9787aa9e21626cfe27b6 100755 GIT binary patch delta 465 zcmXAcT}V@59EbON&zX#g8XD9F(Mrc$*m2u?I%lNBOev!1i;ym?SZ8Y#t`8ArB9?tH zFLXsOafAjry0C&`_%B4rpg~;?%s#*?EhFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/BuildAppSettings.dll b/build-tools/linux-x64/BuildAppSettings.dll index 95b942a48fd85c2c82a027e7960e2dd2cc3befdd..fdcd086bfa3391ce64b623293862ec4eb2e5462c 100644 GIT binary patch delta 267 zcmZqhY4DlQ!D9OLSmVYX4QYXo+be!QHoWV%q+eKg_tEWzn~zAhGkThtCa0R2q$V4h zr&$;pB$*f|nxR@13&f1 zxs#{J1_+pirt-1fU+%hY^})p5*G^5C{6%)70#r~m4=M;$E$i|0QoxS(qn8i(p1HUA zqMR+`L<649doO49N_s3}y@_Kr)%ZkincGjllv)8!#jR#f%vefhtlMEP-NX eKp8`zDv*dF5Q2DyVEt)86~;ie#pdnGo=gC7yG+ag delta 267 zcmZqhY4DlQ!E$WZ;*A@7G^7RgJPpuj^U(9&oNm!{@t$qL<|ESWjGoCB#^&Z}CWZz{ zMoEc@iOHtM$);(kDTyYg$p$9LCT1pP21$wLrsfO`tc(nd3=Awl%)r6Ozzw9}VDUx! zKa;1(1_-P*eHT-_O5Ss`{CxQZ)7H+I{6%)70#tD4XQ&`hbi3U8I`4pm<{gW9i7>pUrfiR81gu#%(fFX&&2#6EGFqy#=C<`Lf7*ZKhfMO;< db}~?v36L~lFau+doFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/BuildTemplates.dll b/build-tools/linux-x64/BuildTemplates.dll index 2952335bbf325a211e9fe9c00569629a5a605667..37c757ff3f379455adf672505371b8f91c31e8e6 100644 GIT binary patch delta 237 zcmZoTz}RqraY6^nJ!Z3Ot_s>MzU0UCxt#)UP?dW)IWm6@iCYHOx$tQ_W0L zlMT(&EDQ~jOpFsvQ!Fja(hO4*O$`mx3=K__(^8BLEhbM6Kgq&#uw?t>goprvS57m6 z<#IDTcf~7LbY1S2n0z2&tpZf=@~H|Uls~%?u|Uo>~F?k%8<;E z%3#J|0wj|e3>nNB(ikj&v;jjBP|TPi5vU@C!4fED29z-bssf1^0wIWJ2-cqlRACHc LTWnq&8_NU$UfWGl delta 237 zcmZoTz}RqraY6^n_KPn*Z|va-6gU@j>S;*jD)-s{#kWb%WVYSBBJeP)MzV#mxp|t2 zp+S;SQet9avZ-;hXFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/ConsoleDialog.dll b/build-tools/linux-x64/ConsoleDialog.dll index 032fb3525c314917cf2cf02ff9f73146711104a7..86a8115e94a96cdeb5259057ac7ad6d886f13331 100644 GIT binary patch delta 243 zcmZojXh@jQ!Qve~f6B(56)FM@=PF;SbDDdvdwMt^rPBZXW*5~WCJi&w)cH{MY0e8mkqcg88ygL6GXs^qxyn%O>3t)J&f{xlnWNHH! zrVPmpsSIWeCO|To!H~h6A&tQTNER~KP7yNlT*+L^gV9~1X19ra8 zocq%qPGwm(I8UCTv04Et_!uS#RGqq6;A5WnOpO!wqMomwT&OvBasVUWWUf=6>BmCIEQEO@9CY diff --git a/build-tools/linux-x64/ESBuild b/build-tools/linux-x64/ESBuild index 41912328b196b680c4edf415c16e09714d9f29f7..9697cf5501ea22e816fe56df9208164e7159e10d 100755 GIT binary patch delta 465 zcmXAcT}V@59EbON&zX#g8XD9F(Mrc$*m2u?I%lNBOev!1i;ym?SZ8Y#t`8ArB9?tH zFLXsOafAjry0C&`_%B4rpg~;?%s#*?EhFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/ESBuild.dll b/build-tools/linux-x64/ESBuild.dll index 08a551630cd0d75fc563d83b6d265dbf43af726b..0e399790cba2109de8b6ae3bcd78637d069f5244 100644 GIT binary patch delta 244 zcmZpe!q_l{aY6@6{bt*18+!t51S+&1O<(bV(P!gn(Is;wb^JHKvGHTkFf&a~H8V*~ zHZ)JOFf>RqF-|m1v9vHtGfYi1H8e~!G&D_4OEEUIn4IL;#KMzsckSdCjsXJGx>Ex_ zEHn3=)ok-DOx>?-vWL@r1*l*yOc1DA*X`}Oujl4BHhwG`$ri@u=4mE| z21!OqiHV8HrpC#pX{jlRCZ@>-CdnpdCT0dniRPx}lam~qSQD9!E(vt<9|4uaE+RW$jjmbZm z!Gghs~85e$GL0dXAq6OA0%RuxRha-u69zLd2I)xz OnqbOczB$-^EfWAnE=zO( diff --git a/build-tools/linux-x64/ESBuildClearLocks b/build-tools/linux-x64/ESBuildClearLocks index bb0a0a176259ff34bb597d605456f162b2b657c0..e51daae4c0c144d660a66f4e55bcf4dfa77e6e8b 100755 GIT binary patch delta 465 zcmXAcT}V@59EbON&zX#g8XD9F(Mrc$*m2u?I%lNBOev!1i;ym?SZ8Y#t`8ArB9?tH zFLXsOafAjry0C&`_%B4rpg~;?%s#*?EhFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/ESBuildClearLocks.dll b/build-tools/linux-x64/ESBuildClearLocks.dll index abfa93d26bee4d2ba0fc121a4d2ab060c1ee7ea7..646df798b6c035cc501c1324fc25a80eb1976d88 100644 GIT binary patch delta 243 zcmZp$Xt0>j!D4sv-1&_?B7y?nR{ZSD=}>g(bQDba(G|U6^9I3Vj2dR9$*E>0smX@s zX%>bCNhZdLrYV*dW@(10iKd2zX@-WT$!RIZh8C0O39GTpXbPV^`GjzQfYgr7m3%@8 zj$Qhj!LqwK{q4pc5kUdVzwMa;A9@_x3zu+|E^>dmd4u3FMvY_(V{`K~6GMX} zqol;d#AH+BWYe_NltdHLWCN3A6EhPtgQP@rQ}fC5gwUf=IxT6OaR-FO2YsE diff --git a/build-tools/linux-x64/FetchNuGetVersion b/build-tools/linux-x64/FetchNuGetVersion index 077ee4a1f0e334485400a685c677c4214630dfd6..23e5b6523554480d91c722d11334a5735f22e258 100755 GIT binary patch delta 465 zcmXAcT}V@59EbON&zX#g8XD9F(Mrc$*m2u?I%lNBOev!1i;ym?SZ8Y#t`8ArB9?tH zFLXsOafAjry0C&`_%B4rpg~;?%s#*?EhFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/FetchNuGetVersion.dll b/build-tools/linux-x64/FetchNuGetVersion.dll index ad6a822ce171d85252b113f8c970259366dd7a16..17e51173193982112a4967c63e7cb0051538e49e 100644 GIT binary patch delta 238 zcmZp0XmFU&!IEufc4cGF9uWcm%=Ijs$L6@K64u`6$TQDkbA;$aCJi&wCJpnQOy2k45kdp45Y84`giQWz|OVrD=YL!c^pUr zfiR81gu#%(fFX&&2#6EGFqy#=C<`Lf7*ZKhfMO;FPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/GBTest.dll b/build-tools/linux-x64/GBTest.dll index 3c4b2d9343eaed76d4fdca45031aa529d6919c1e..c97a40780e8d0e54b0f4e7cefbc3e04fbb1e3944 100644 GIT binary patch delta 243 zcmZpuX{edd!P04c`Nzf{4t;@$u$+n66W@DIzw&?DM#=iv%}ew%STxK`lT*!1Qj-nM z(<}@Pl1z*fO;ao_%+d@~6HN^b(+mwwlhaa+4J{^{m~3Hb4EuO#@*9%?0WPi7JDM)5 z-1et8UdZ+_ik|FaI#&TI*ai~>srHOs_trscW#N>=n)aIo&Hge@G~n3GXYq~6-;BYO zA(l delta 243 zcmZpuX{edd!J;!!ykTPxhrYlC+sJ9VR)6rDxA1Spp}+dCH!so8V9`jnFg7<&Gchzs zGD=EJOiVU4PBu+TO-VE{O*Sw|HZe0XGe}A_H#MJZVzPzhW&f|Ali!#G2-KC#WsrEh z(y{lMrNPJYrn!@SOy?><1ryIg1wpFI6`%c($;tA1DB<&Ov!K~u#)$?ToB1rhG5IGm zSTGnfm;+%Ng9(Eng8@SlgAouXf?+a)DNq(frZJ>4qyWWCfb3+TDia`S!e9o*AU%md O6HFP*HwRmFPA)%JfaS19BBZZGru6raK=>28)p zzR^oR>l=5WlWJqN5}Il6xi-d@AJTB=S704=onMd;rjD*}GM!{#O)&=g(saaXAILOg!9d#B3?sCPNIdP~%2a*Q0*FepmvhHSmW%0>a zB>kf^VUyFrvB~hBq8w!Flke)FQdDWEbas16R_G34rS|_@5~qyovx7!zLW<3&dv!0D zFBO8l#+Astc yIyZzVf(Ex@mTv0Y-yXAqy4i7D_&ThB&~-DGPkS&8byLg1ZOH`}!r5FM?0*0#oT117 diff --git a/build-tools/linux-x64/RazorCopy.dll b/build-tools/linux-x64/RazorCopy.dll index a92417c1d594543b135ed1881266327b7d33d606..dbee86d1e2742fc5efe03b96e6e831696cd08180 100644 GIT binary patch delta 243 zcmZqhY4DlQ!IFJ;ThGRxJ(2=~9a_Qj3xa(%W7oN8v0nrvvE zW?^WMWMZ6Xnqp~TmS&imXliJfW@u=doR(s2XfgS$j5*8k-OIO5=8z2#2o^Ot%IM1H zw0owguuP}s`Njf5Ak{bjrbX7|u}o+*Z9l%*Q0^|{L<6?XdoO z49N_s3}y@_Kr)%ZkincGjllv)8!#jR#f%vefhtlMEP-NXKp8`zDv*dF5Q2DyVEt)8 O6~;ie#pZP7nM?qB97V(c delta 243 zcmZqhY4DlQ!E*cNihCP-_DBl+DE`4CC>i75m;UPcdhfp3n;=GKXw{K*O$oMF;FB z`fb0xsL`lr&Z@~7vWpdKy? z77WG==0KRnV8UR?V8D>XUs5-^1gc13ump;k0c8weKS delta 234 zcmZorX;7Ka!P4~N_Uw&46W9eLk26o^`1RCziq)4N#)p;}PuAghr;%)7Y;K-rVrY(B=dYoHAl2Rv%gU1;U7r4;%phfRAXh(&e=>swgE50S5T-Gh zFc>lzFeEV;0dXQ2CNr1 Date: Thu, 12 Feb 2026 09:31:26 -0600 Subject: [PATCH 4/5] PR feedback --- src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs index 028bd414b..51d291f2c 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs @@ -466,7 +466,7 @@ protected internal override void UpdateGeoBlazorReferences(IJSObjectReference co base.UpdateGeoBlazorReferences(coreJsModule, proJsModule, view, parent, layer, depth, visited); if (needsUpdate) { - _ = Task.Run(async () => await UpdateWidget()); + InvokeAsync(UpdateWidget); } } From 2b04cf615a51c80bccffd217adf1e73b7cc40924 Mon Sep 17 00:00:00 2001 From: "submodule-validation-for-geoblazor[bot]" <235551211+submodule-validation-for-geoblazor[bot]@users.noreply.github.com> Date: Thu, 12 Feb 2026 15:36:08 +0000 Subject: [PATCH 5/5] Pipeline Build Commit of Version and Docs --- Directory.Build.props | 2 +- build-tools/linux-x64/BuildAppSettings.dll | Bin 9728 -> 9728 bytes build-tools/linux-x64/BuildTemplates.dll | Bin 24576 -> 24576 bytes build-tools/linux-x64/ConsoleDialog.dll | Bin 12288 -> 12288 bytes build-tools/linux-x64/ESBuild.dll | Bin 18944 -> 18944 bytes build-tools/linux-x64/ESBuildClearLocks.dll | Bin 7168 -> 7168 bytes build-tools/linux-x64/FetchNuGetVersion.dll | Bin 8192 -> 8192 bytes build-tools/linux-x64/GBTest.dll | Bin 15872 -> 15872 bytes build-tools/linux-x64/RazorCopy.dll | Bin 9728 -> 9728 bytes build-tools/linux-x64/Utilities.dll | Bin 4608 -> 4608 bytes 10 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index a33157691..e0d27f3d9 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,7 +6,7 @@ enable enable true - 5.0.0.77 + 5.0.0.78 Debug;Release;SourceGen Highlighting AnyCPU true diff --git a/build-tools/linux-x64/BuildAppSettings.dll b/build-tools/linux-x64/BuildAppSettings.dll index fdcd086bfa3391ce64b623293862ec4eb2e5462c..f3f7d80f9cf9e7ecdc42d03ba0f8b0ca6c4ec256 100644 GIT binary patch delta 265 zcmZqhY4DlQ!7?-W(Cv*q8qxx5zQ?}_xUA~9^jk*yd@V=$%}1o$89mL@3{6r}EKQP< z%?;BmjLi&9lMIavjnm9i6V1$1%`MDK&5TV=EG!rpSQ!}@85mfAn1O?lfg4D{!T+8c z4U?zH1_*2tD*N&6QN7o^`_8htZ(0^l{vx|k0V)`E4=M;$&9LG{@U0iepWU7wXV<;? zqMR+`L<649dd}w f<_xI}i9m4>Z4Ojp29!4g%9sN6T5R5`?9BuKI*d=l delta 265 zcmZqhY4DlQ!D9OLSmVYX4QYXo+be!QHoWV%q+eKg_tEWzn~zAhGkThtCa0R2q$V4h zr&$;pB$*f|nxR@13&f1 zxs#{J1_+pirt-1fU+%hY^})p5*G^5C{6%)70#r~m4=M;$E$i|0QoxS(qn8i(p1HUA zqMR+`L<649d2}WM3Yf>$**#WarD7^CxUx5qOwY-8{|EBqhbt zBq`b4FwMf)%+NH+(8$m@%{(>H%skcH!pzjn*wn;g@}%%nERU8mwoguo2oSg*c1HB@ z!sCwn_U`RW)|=)x`9Q>41*qW0I;bE>_5NT6S=}!z9IcMw4>$Kl9%uG7XGmi(WH4b! z0YXb4oy3sLU=9>XW3XT_W-tS?Oo3vC3`Rg~3=}nINM%R_ii2o#pc*rvyctl&6sXr? J^TOD8CIEv4OQQe) delta 234 zcmZoTz}RqraY6^nJ!Z3Ot_s>MzU0UCxt#)UP?dW)IWm6@iCY)y+(kQ_W0L zlMT(&EDQ~jOpFsvQ!Fja(hO4*O$`mx3=K__(^8BLCr=7L#lmy2Wc%cVhya0CPBVh# zax*-4#Vc2IUGA2cd>~@20#xwjFQ_0;wYjOQ`P_f(HMP%Q77A?cjXcimYsO&8kj#+E zV8&nqB$F8o8O#~d7%YIa0Yef{%$Ok&s3L{I5-4T{lraRV0*M#`A&6%P)}IDcVa#B- Jd0}ik699zYOy2+i diff --git a/build-tools/linux-x64/ConsoleDialog.dll b/build-tools/linux-x64/ConsoleDialog.dll index 86a8115e94a96cdeb5259057ac7ad6d886f13331..fa878f1e73a37d1a9270933cdc75141ebba22e2b 100644 GIT binary patch delta 240 zcmZojXh@jQ!4jIkbi&4-6)FOMd(7uNnf<_Lo!+e*yFc8#wAn?qh)LZ%&Cnzz#nL1x z+1xPA!r08vG|AA&&^XOJHPOsG)!f3&)Xdn_#A5PY^>CJ2qnZzsEi?iI1YCmSE!^2X zR>aye?P+3YpFBfjwE|RdhXzy-sJh_lKejphcD()eS!es~$%UG8CkHU{ZRXQ5V)iv> zNMkT$FkwgmLQ5c>#E{Hj4irgauwXD|FaxqofntUXMnG%~6g6i^Wk>{ygJ^T08Z)50 Q8BoR)sMlh1uWm6D0Ko1@!~g&Q delta 240 zcmZojXh@jQ!Qve~f6B(56)FM@=PF;SbDDdvdwMt^rPBZXW*5~WCUrB@6&07kyed|F1#zGe)j z49N_s3}y@_Kr)%ZkincGjllv)8!#jR#f%vefhtlMEP-NXKp8`zDv*dF5Q2DyVEt)8 N6~+vPn|pPOnE;UHPH_ML diff --git a/build-tools/linux-x64/ESBuild.dll b/build-tools/linux-x64/ESBuild.dll index 0e399790cba2109de8b6ae3bcd78637d069f5244..6afa44ea618d8238d23fcaa46f9c271fa3dd3598 100644 GIT binary patch delta 241 zcmZpe!q_l{aY6@+%TARO8+!t51X9d+lb5CKcbRiM|6%u*O?{i+*!Z!io2MC?q@-Ay zBqf_0rdb%98JZ>;8W|d=nWrY2nWvgtn3RqF-|m1v9vHtGfYi1H8e~!G&D_4OEET_oaorh!jo`!?c^7Z0Rq#yQv*IM zGxwdj!NMPTq-kT1h@e3FghlnMT64Twt824ah1OMU-XM64QQbVv&?F_r(j+O_ z+%V0;*v!y0$7_s@b&oYGyx+?SGORyg++1qbM)qL<6?Xd}2||zUB;R z42BFQ3@Jcp38a%4k{Qf_B54d348{y*K$a;`%#gtdh>d}w<_xI}i9m4>Z4Ojp29!4g P%9sN6T5R4b>CFTHUe`tx delta 240 zcmZp$Xt0>j!D4sv-1&_?B7y?nR{ZSD=}>g(bQDba(G|U6^9I3VjOu2l$*E>0smX@s zX%>bCNhZdLrYV*dW@(10iKd2zX@-WT$!RIZhLh(CtFz2#3ZFdrgm8d>)Q-)Sd_oD1 zUHZ2#-*}_3YO;pNW(BC=#Zyp0plV?irERUAo3}S@c(>{PW=2t7#)$@OoB70|n0?I{ zOc|0HQW?w`On_uEgCT=CLmGnxkTzgQ0*V3h3Bts)Z<23WsL^JbLa|<(5GhweJIZ%xmP~HqEV+z!3 Kv3aYkHxmH=azzIK delta 235 zcmZp0XmFU&!IEufc4cGF9uWcm%=Ijs$L6@K64u`6$TQDkbA;$aCUrB@3h3Bts)Z<23WsL^JbLa|<(5GhweJIZ%xmP~HqE OV+z!3u{qFsJre*LV?~<) delta 240 zcmZpuX{edd!P04c`Nzf{4t;@$u$+n66W@DIzw&?DM#=iv%}ew%Sk%o-lT*!1Qj-nM z(<}@Pl1z*fO;ao_%+d@~6HN^b(+mwwlhaa+4JR9$Y-MQ-`*>;c8Eeni-p#SWG@6W5E*LV!M4Zhirhroop8EN5#$V z?Q0?@FxsA&JUK&lu>w@^yE{}6sMC3kG8bGa$1%ePMEkPQ$B7BxA_=*s7` zd#0$cOsD4g$r-YX6`+EPs-c1))i?j9Mb_l8OlUN1Kfc*e?k?j*1Gde43S7*-W(=kb z$qcCsW(+1kGMT}U!JHwD!2(DdFeCxRj2RMvDpD9MfnsJr8AG5dkcc4=f_R2t{b@iI N#tep=Qu|hNH%~J(NlCFZNlG?1 zOtUaHGc-*yG%_?!Gfz!4Gfy?QFf%nXHZ`%B?8vFi^5NV+J!I%M>VP$Y2D-#z0YXhE#?`pg4#&2dXgx%9{aYOo4hWHtX_V GW&!}67f28Q delta 230 zcmZorX;7Ka$=v^W`Np0J>;h*t7TtO1vBzn;#l-E43{CAP>u|hNH#1F6H8V*~HZ)JO zFf>RqF-|m1v9vHtGfYi1H8e~!G&D_4OEET_?8vFi@>MGB$>a>q0D(idb0ZyRDSP(M zyRVp_FfU>93C>Ifs9>i*R1l~-#q~Pxn@_2nrnN6bH8%%x^|SbzF_