diff --git a/Directory.Build.props b/Directory.Build.props index 641c73110..2987ef99d 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,7 +6,7 @@ enable enable true - 5.0.0.82 + 5.0.0.84 Debug;Release;SourceGen Highlighting AnyCPU true diff --git a/build-tools/linux-x64/BuildAppSettings.dll b/build-tools/linux-x64/BuildAppSettings.dll index cc9f6c247..84a80f7f2 100644 Binary files a/build-tools/linux-x64/BuildAppSettings.dll and b/build-tools/linux-x64/BuildAppSettings.dll differ diff --git a/build-tools/linux-x64/BuildAppSettings.runtimeconfig.json b/build-tools/linux-x64/BuildAppSettings.runtimeconfig.json index 104be4d5d..37ed606d1 100644 --- a/build-tools/linux-x64/BuildAppSettings.runtimeconfig.json +++ b/build-tools/linux-x64/BuildAppSettings.runtimeconfig.json @@ -12,8 +12,8 @@ } }, "configProperties": { - "EntryPointFilePath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts\\BuildAppSettings.cs", - "EntryPointFileDirectoryPath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts", + "EntryPointFilePath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts/BuildAppSettings.cs", + "EntryPointFileDirectoryPath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts", "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, "System.ComponentModel.DefaultValueAttribute.IsSupported": false, "System.ComponentModel.Design.IDesignerHost.IsSupported": false, diff --git a/build-tools/linux-x64/ConsoleDialog.dll b/build-tools/linux-x64/ConsoleDialog.dll index d3c11cd59..1dca561d5 100644 Binary files a/build-tools/linux-x64/ConsoleDialog.dll and b/build-tools/linux-x64/ConsoleDialog.dll differ diff --git a/build-tools/linux-x64/ConsoleDialog.runtimeconfig.json b/build-tools/linux-x64/ConsoleDialog.runtimeconfig.json index 0580e93e7..51192fb4c 100644 --- a/build-tools/linux-x64/ConsoleDialog.runtimeconfig.json +++ b/build-tools/linux-x64/ConsoleDialog.runtimeconfig.json @@ -12,8 +12,8 @@ } }, "configProperties": { - "EntryPointFilePath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts\\ConsoleDialog.cs", - "EntryPointFileDirectoryPath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts", + "EntryPointFilePath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts/ConsoleDialog.cs", + "EntryPointFileDirectoryPath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts", "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, "System.ComponentModel.DefaultValueAttribute.IsSupported": false, "System.ComponentModel.Design.IDesignerHost.IsSupported": false, diff --git a/build-tools/linux-x64/ESBuild.deps.json b/build-tools/linux-x64/ESBuild.deps.json index 1b26f4be4..aeb5561b8 100644 --- a/build-tools/linux-x64/ESBuild.deps.json +++ b/build-tools/linux-x64/ESBuild.deps.json @@ -15,7 +15,18 @@ "ESBuild.dll": {} } }, + "Polly.Core/8.6.5": { + "runtime": { + "lib/net8.0/Polly.Core.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.6.5.5194" + } + } + }, "Utilities/1.0.0": { + "dependencies": { + "Polly.Core": "8.6.5" + }, "runtime": { "Utilities.dll": { "assemblyVersion": "1.0.0.0", @@ -31,6 +42,13 @@ "serviceable": false, "sha512": "" }, + "Polly.Core/8.6.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t+sUVrIwvo7UmsgHGgOG9F0GDZSRIm47u2ylH17Gvcv1q5hNEwgD5GoBlFyc0kh/pebmPyrAgvGsR/65ZBaXlg==", + "path": "polly.core/8.6.5", + "hashPath": "polly.core.8.6.5.nupkg.sha512" + }, "Utilities/1.0.0": { "type": "project", "serviceable": false, diff --git a/build-tools/linux-x64/ESBuild.dll b/build-tools/linux-x64/ESBuild.dll index 5bffe19ed..80cfc6896 100644 Binary files a/build-tools/linux-x64/ESBuild.dll and b/build-tools/linux-x64/ESBuild.dll differ diff --git a/build-tools/linux-x64/ESBuild.runtimeconfig.json b/build-tools/linux-x64/ESBuild.runtimeconfig.json index 0e80e369d..38c4501b6 100644 --- a/build-tools/linux-x64/ESBuild.runtimeconfig.json +++ b/build-tools/linux-x64/ESBuild.runtimeconfig.json @@ -12,8 +12,8 @@ } }, "configProperties": { - "EntryPointFilePath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts\\ESBuild.cs", - "EntryPointFileDirectoryPath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts", + "EntryPointFilePath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts/ESBuild.cs", + "EntryPointFileDirectoryPath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts", "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, "System.ComponentModel.DefaultValueAttribute.IsSupported": false, "System.ComponentModel.Design.IDesignerHost.IsSupported": false, diff --git a/build-tools/linux-x64/ESBuildClearLocks.deps.json b/build-tools/linux-x64/ESBuildClearLocks.deps.json index e01a173b2..ee48953be 100644 --- a/build-tools/linux-x64/ESBuildClearLocks.deps.json +++ b/build-tools/linux-x64/ESBuildClearLocks.deps.json @@ -15,7 +15,18 @@ "ESBuildClearLocks.dll": {} } }, + "Polly.Core/8.6.5": { + "runtime": { + "lib/net8.0/Polly.Core.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.6.5.5194" + } + } + }, "Utilities/1.0.0": { + "dependencies": { + "Polly.Core": "8.6.5" + }, "runtime": { "Utilities.dll": { "assemblyVersion": "1.0.0.0", @@ -31,6 +42,13 @@ "serviceable": false, "sha512": "" }, + "Polly.Core/8.6.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t+sUVrIwvo7UmsgHGgOG9F0GDZSRIm47u2ylH17Gvcv1q5hNEwgD5GoBlFyc0kh/pebmPyrAgvGsR/65ZBaXlg==", + "path": "polly.core/8.6.5", + "hashPath": "polly.core.8.6.5.nupkg.sha512" + }, "Utilities/1.0.0": { "type": "project", "serviceable": false, diff --git a/build-tools/linux-x64/ESBuildClearLocks.dll b/build-tools/linux-x64/ESBuildClearLocks.dll index bdd26b280..db0a9b972 100644 Binary files a/build-tools/linux-x64/ESBuildClearLocks.dll and b/build-tools/linux-x64/ESBuildClearLocks.dll differ diff --git a/build-tools/linux-x64/ESBuildClearLocks.runtimeconfig.json b/build-tools/linux-x64/ESBuildClearLocks.runtimeconfig.json index d21843004..da6fa6890 100644 --- a/build-tools/linux-x64/ESBuildClearLocks.runtimeconfig.json +++ b/build-tools/linux-x64/ESBuildClearLocks.runtimeconfig.json @@ -12,8 +12,8 @@ } }, "configProperties": { - "EntryPointFilePath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts\\ESBuildClearLocks.cs", - "EntryPointFileDirectoryPath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts", + "EntryPointFilePath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts/ESBuildClearLocks.cs", + "EntryPointFileDirectoryPath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts", "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, "System.ComponentModel.DefaultValueAttribute.IsSupported": false, "System.ComponentModel.Design.IDesignerHost.IsSupported": false, diff --git a/build-tools/linux-x64/FetchNuGetVersion.dll b/build-tools/linux-x64/FetchNuGetVersion.dll index e093316ee..ea57d2c75 100644 Binary files a/build-tools/linux-x64/FetchNuGetVersion.dll and b/build-tools/linux-x64/FetchNuGetVersion.dll differ diff --git a/build-tools/linux-x64/FetchNuGetVersion.runtimeconfig.json b/build-tools/linux-x64/FetchNuGetVersion.runtimeconfig.json index 75ffff43f..131a45746 100644 --- a/build-tools/linux-x64/FetchNuGetVersion.runtimeconfig.json +++ b/build-tools/linux-x64/FetchNuGetVersion.runtimeconfig.json @@ -12,8 +12,8 @@ } }, "configProperties": { - "EntryPointFilePath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts\\FetchNuGetVersion.cs", - "EntryPointFileDirectoryPath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts", + "EntryPointFilePath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts/FetchNuGetVersion.cs", + "EntryPointFileDirectoryPath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts", "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, "System.ComponentModel.DefaultValueAttribute.IsSupported": false, "System.ComponentModel.Design.IDesignerHost.IsSupported": false, diff --git a/build-tools/linux-x64/GBTest.deps.json b/build-tools/linux-x64/GBTest.deps.json index 9104bfbac..6492db7b1 100644 --- a/build-tools/linux-x64/GBTest.deps.json +++ b/build-tools/linux-x64/GBTest.deps.json @@ -24,7 +24,18 @@ } } }, + "Polly.Core/8.6.5": { + "runtime": { + "lib/net8.0/Polly.Core.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.6.5.5194" + } + } + }, "Utilities/1.0.0": { + "dependencies": { + "Polly.Core": "8.6.5" + }, "runtime": { "Utilities.dll": { "assemblyVersion": "1.0.0.0", @@ -47,6 +58,13 @@ "path": "cliwrap/3.10.0", "hashPath": "cliwrap.3.10.0.nupkg.sha512" }, + "Polly.Core/8.6.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t+sUVrIwvo7UmsgHGgOG9F0GDZSRIm47u2ylH17Gvcv1q5hNEwgD5GoBlFyc0kh/pebmPyrAgvGsR/65ZBaXlg==", + "path": "polly.core/8.6.5", + "hashPath": "polly.core.8.6.5.nupkg.sha512" + }, "Utilities/1.0.0": { "type": "project", "serviceable": false, diff --git a/build-tools/linux-x64/GBTest.dll b/build-tools/linux-x64/GBTest.dll index 199e9b7ad..e80b81477 100644 Binary files a/build-tools/linux-x64/GBTest.dll and b/build-tools/linux-x64/GBTest.dll differ diff --git a/build-tools/linux-x64/GBTest.runtimeconfig.json b/build-tools/linux-x64/GBTest.runtimeconfig.json index 7ff48568f..f923bd398 100644 --- a/build-tools/linux-x64/GBTest.runtimeconfig.json +++ b/build-tools/linux-x64/GBTest.runtimeconfig.json @@ -12,8 +12,8 @@ } }, "configProperties": { - "EntryPointFilePath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts\\GBTest.cs", - "EntryPointFileDirectoryPath": "D:\\dymaptic.GeoBlazor.CodeGen\\GeoBlazor.Pro\\GeoBlazor\\build-tools\\build-scripts", + "EntryPointFilePath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts/GBTest.cs", + "EntryPointFileDirectoryPath": "/home/runner/work/GeoBlazor/GeoBlazor/build-tools/build-scripts", "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true, "System.ComponentModel.DefaultValueAttribute.IsSupported": false, "System.ComponentModel.Design.IDesignerHost.IsSupported": false, diff --git a/build-tools/linux-x64/Utilities.deps.json b/build-tools/linux-x64/Utilities.deps.json index 88bf821d5..09cf4bf61 100644 --- a/build-tools/linux-x64/Utilities.deps.json +++ b/build-tools/linux-x64/Utilities.deps.json @@ -7,9 +7,20 @@ "targets": { ".NETCoreApp,Version=v10.0": { "Utilities/1.0.0": { + "dependencies": { + "Polly.Core": "8.6.5" + }, "runtime": { "Utilities.dll": {} } + }, + "Polly.Core/8.6.5": { + "runtime": { + "lib/net8.0/Polly.Core.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.6.5.5194" + } + } } } }, @@ -18,6 +29,13 @@ "type": "project", "serviceable": false, "sha512": "" + }, + "Polly.Core/8.6.5": { + "type": "package", + "serviceable": true, + "sha512": "sha512-t+sUVrIwvo7UmsgHGgOG9F0GDZSRIm47u2ylH17Gvcv1q5hNEwgD5GoBlFyc0kh/pebmPyrAgvGsR/65ZBaXlg==", + "path": "polly.core/8.6.5", + "hashPath": "polly.core.8.6.5.nupkg.sha512" } } } \ No newline at end of file diff --git a/build-tools/linux-x64/Utilities.dll b/build-tools/linux-x64/Utilities.dll index 9e94a32e0..d84694fc4 100644 Binary files a/build-tools/linux-x64/Utilities.dll and b/build-tools/linux-x64/Utilities.dll differ diff --git a/samples/dymaptic.GeoBlazor.Core.Sample.Shared/wwwroot/css/site.css b/samples/dymaptic.GeoBlazor.Core.Sample.Shared/wwwroot/css/site.css index 04d1c2425..fd39ef202 100644 --- a/samples/dymaptic.GeoBlazor.Core.Sample.Shared/wwwroot/css/site.css +++ b/samples/dymaptic.GeoBlazor.Core.Sample.Shared/wwwroot/css/site.css @@ -7,43 +7,43 @@ } body { -background-color: var(--background-grey-1); + background-color: var(--background-grey-1); } footer { -display: none; + display: none; } summary { -display: list-item; -list-style-position: outside; + display: list-item; + list-style-position: outside; } summary a { -margin-left: -2rem; + margin-left: -2rem; } .esri-feature-templates { -background: unset; + background: unset; } .esri-feature-form { background-color: var(--background-grey-1); } -.esri-widget { -color: unset; +.esri-widget:not(.esri-feature-table) { + color: unset; } .esri-button { -color: unset; -background-color: unset; -border: 0.125rem solid transparent; + color: unset; + background-color: unset; + border: 0.125rem solid transparent; } .esri-button:hover { -color: unset; -border-color: var(--geoblazor-accent-hover); + color: unset; + border-color: var(--geoblazor-accent-hover); } :root { @@ -55,23 +55,25 @@ border-color: var(--geoblazor-accent-hover); --calcite-input-actions-icon-color: var(--text-emphasis); --calcite-label-text-color: var(--text-emphasis); --calcite-list-label-text-color: var(--text-emphasis); + --calcite-color-text-2: var(--text-emphasis); + --calcite-color-foreground-2: var(--background-grey-3); } .nav-link { -color: unset; + color: unset; } .nav-link:hover { -color: unset; + color: unset; } .nav-list-link .oi { -top: 2px; -height: 18px; + top: 2px; + height: 18px; } .container { -background-color: unset; + background-color: unset; } /*** TYPOGRAPHY ***/ @@ -168,16 +170,38 @@ i.icon { background-position: center; } -i.icon.plus {background-image: url('../images/icons/plus.svg');} -i.icon.check {background-image: url('../images/icons/check.svg');} -i.icon.close--accent {background-image: url('../images/icons/close-accent.svg');} -i.icon.close {background-image: url('../images/icons/close.svg');} -i.icon.info {background-image: url('../images/icons/info.svg');} -i.icon.edit {background-image: url('../images/icons/edit.svg');} -i.icon.save {background-image: url('../images/icons/save.svg');} +i.icon.plus { + background-image: url('../images/icons/plus.svg'); +} + +i.icon.check { + background-image: url('../images/icons/check.svg'); +} + +i.icon.close--accent { + background-image: url('../images/icons/close-accent.svg'); +} + +i.icon.close { + background-image: url('../images/icons/close.svg'); +} + +i.icon.info { + background-image: url('../images/icons/info.svg'); +} + +i.icon.edit { + background-image: url('../images/icons/edit.svg'); +} + +i.icon.save { + background-image: url('../images/icons/save.svg'); +} @media (prefers-color-scheme: light) { - i.icon.info {background-image: url('../images/icons/info.svg');} + i.icon.info { + background-image: url('../images/icons/info.svg'); + } } .error { @@ -193,11 +217,11 @@ hr { /*** CONTROLS ***/ -body { /* body tag added to help overwrite Bootstrap */ +body { /* body tag added to help overwrite Bootstrap */ text-wrap: pretty; color: var(--text); - + .btn { color: var(--text-button); font-family: 'Aller', 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; @@ -248,7 +272,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-primary:active, .btn-primary:focus, .btn-primary:focus-visible, - :not(.btn-check)+.btn.btn-primary:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-primary:active, /* Bootstrap override */ .btn-primary:first-child:active { background-color: var(--geoblazor-primary-hover); } @@ -261,7 +285,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-secondary:active, .btn-secondary:focus, .btn-secondary:focus-visible, - :not(.btn-check)+.btn.btn-secondary:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-secondary:active, /* Bootstrap override */ .btn-secondary:first-child:active { background-color: var(--geoblazor-secondary-hover); } @@ -274,7 +298,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-accent:active, .btn-accent:focus, .btn-accent:focus-visible, - :not(.btn-check)+.btn.btn-accent:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-accent:active, /* Bootstrap override */ .btn-accent:first-child:active { background-color: var(--geoblazor-accent-hover); } @@ -288,7 +312,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-gradient:active, .btn-gradient:focus, .btn-gradient:focus-visible, - :not(.btn-check)+.btn.btn-gradient:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-gradient:active, /* Bootstrap override */ .btn-gradient:first-child:active { background-color: unset; background: var(--torchy-gradient-horizontal-hover); @@ -306,7 +330,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-gradient-dark:active, .btn-gradient-dark:focus, .btn-gradient-dark:focus-visible, - :not(.btn-check)+.btn.btn-gradient-dark:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-gradient-dark:active, /* Bootstrap override */ .btn-gradient-dark:first-child:active { background: linear-gradient(var(--geoblazor-gradient-dark-hover), var(--geoblazor-gradient-dark-hover)) padding-box, var(--torchy-gradient-horizontal-hover) border-box; @@ -319,7 +343,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-gradient-dark:active, .btn-gradient-dark:focus, .btn-gradient-dark:focus-visible, - :not(.btn-check)+.btn.btn-gradient-dark:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-gradient-dark:active, /* Bootstrap override */ .btn-gradient-dark:first-child:active { color: var(--geoblazor-primary); } @@ -336,7 +360,7 @@ body { /* body tag added to help overwrite Bootstrap */ .btn-danger:active, .btn-danger.btn-small:active, .btn-danger:focus, .btn-danger.btn-small:focus, .btn-danger:focus-visible, .btn-danger.btn-small:focus-visible, - :not(.btn-check)+.btn.btn-danger:active, /* Bootstrap override */ + :not(.btn-check) + .btn.btn-danger:active, /* Bootstrap override */ .btn-danger:first-child:active, .btn-danger.btn-small:first-child:active { background-color: var(--error); } @@ -354,9 +378,9 @@ body { /* body tag added to help overwrite Bootstrap */ } .spaced-row { - margin: 1rem 0; - display: flex; - flex-direction: row; + margin: 1rem 0; + display: flex; + flex-direction: row; flex-wrap: wrap; justify-content: space-evenly; align-items: center; @@ -418,7 +442,7 @@ body { /* body tag added to help overwrite Bootstrap */ /*** INPUT FIELDS ***/ -body { /* body tag added to help overwrite Bootstrap */ +body { /* body tag added to help overwrite Bootstrap */ input, select, @@ -440,7 +464,7 @@ body { /* body tag added to help overwrite Bootstrap */ padding: 0.5rem 2rem; min-width: 8rem; } - + input:not([type="checkbox"]) { padding: 0.5rem 2rem; min-width: 8rem; @@ -450,7 +474,7 @@ body { /* body tag added to help overwrite Bootstrap */ background-color: var(--background-grey-2); color: var(--text-emphasis); } - + select optgroup { background-color: var(--background-grey-3); color: var(--text-emphasis); @@ -533,6 +557,7 @@ form { align-items: center; gap: 0.25rem; } + .form-group__tooltip-field i.icon { width: 2rem; height: 2rem; @@ -567,13 +592,16 @@ body { border: solid transparent; border-width: 0 0 0.125rem; } + td, th { padding: 0.65rem; } + th { color: var(--text-emphasis); font-size: 1.25rem; } + td { color: var(--text); } @@ -613,7 +641,6 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { } - #blazor-error-ui { background: var(--background-grey-2); color: var(--geoblazor-accent); @@ -648,14 +675,17 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { width: 12px; height: 12px; } + ::-webkit-scrollbar-track { background: var(--background-grey-2); border-radius: 6px; } + ::-webkit-scrollbar-thumb { background: var(--background-grey-3); border-radius: 6px; } + ::-webkit-scrollbar-thumb:hover { background: var(--background-grey-4); } @@ -802,7 +832,7 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { height: 6rem; } -.side-bar>hr { +.side-bar > hr { border-bottom: 0.25rem solid var(--geoblazor-primary); width: calc(100% - 2rem); margin: 0 1rem; @@ -836,7 +866,7 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { height: 100%; width: calc(100% - 3.5rem); background-size: contain; - background-repeat: no-repeat; + background-repeat: no-repeat; background-position: left center; background-image: url('../images/GeoBlazor_by_dymaptic-Logo-400px.webp'); } @@ -979,9 +1009,9 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { .navbar__logo { background-image: url('../images/GeoBlazor_by_dymaptic-Logo-400px-dark.webp'); } - + .side-bar { - background: linear-gradient(var(--background-grey-1), var(--background-grey-1)) padding-box, + background: linear-gradient(var(--background-grey-1), var(--background-grey-1)) padding-box, var(--geoblazor-gradient-vertical) border-box; } @@ -992,7 +1022,7 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { .nav-list .nav-list-item:has(.nav-list-link.active) { background-color: var(--background-grey-4); } - + .oi img:not(.pro .oi img) { filter: invert(1); } @@ -1012,7 +1042,7 @@ a:not([href]):not([class]), a:not([href]):not([class]):hover { .dymaptic-branding { margin: 0.5rem; - top: -2rem!important; + top: -2rem !important; } .instructions { @@ -1074,7 +1104,7 @@ input:checked[type=checkbox] { .form-check-input:focus[type=checkbox] { border-color: var(--geoblazor-accent-emphasis); - box-shadow: 0 0 0 0.25rem + box-shadow: 0 0 0 0.25rem } .form-check-input:hover[type=checkbox] { @@ -1145,15 +1175,15 @@ input[type=radio] { input[type="text"], input[type="number"] { width: 5.5rem; } - + .links-div { flex-direction: column; } - + .spaced-row { flex-direction: column; } - + body { .btn { padding: 1rem; diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.cs index 4ed02aa74..c596e56b6 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.cs @@ -6,7 +6,9 @@ public partial class CSVLayer : Layer, IFeatureReductionLayer, IPopupTemplateLay /// public override LayerType Type => LayerType.CSV; - + + /// + public string FeatureTableLayerType => Type.ToString(); /// /// A copyright string to identify ownership of the data. diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.gb.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.gb.cs index 7e7ad3164..f29243320 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.gb.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/CSVLayer.gb.cs @@ -11,7 +11,7 @@ public partial class CSVLayer : IBlendLayer, IDisplayFilteredLayer, IFeatureEffectLayer, IFeatureSetLayer, - IFeatureTableWidgetLayers, + IFeatureTableWidgetLayer, IOrderedLayer, IScaleRangeLayer, ITemporalLayer, diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.cs index dc4b3621e..95b19e5cd 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.cs @@ -78,6 +78,9 @@ public partial class FeatureLayer : Layer, IFeatureReductionLayer, IPopupTemplat /// public override LayerType Type => LayerType.Feature; + + /// + public string FeatureTableLayerType => Type.ToString(); /// /// Configures the method for reducing the number of point features in the view. diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.gb.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.gb.cs index 81f773d21..84285a84d 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.gb.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/FeatureLayer.gb.cs @@ -16,7 +16,7 @@ public partial class FeatureLayer : IAPIKeyMixin, IDisplayFilteredLayer, IFeatureEffectLayer, IFeatureSetLayer, - IFeatureTableWidgetLayers, + IFeatureTableWidgetLayer, IFeatureTemplatesViewModelLayers, IFeatureTemplatesWidgetLayers, IInputBaseLayers, diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.cs index 952703431..4b72ce6fe 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.cs @@ -7,6 +7,8 @@ public partial class GeoJSONLayer : Layer, IFeatureReductionLayer, IPopupTemplat /// public override LayerType Type => LayerType.GeoJSON; + /// + public string FeatureTableLayerType => Type.ToString(); /// /// A copyright string to identify ownership of the data. diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.gb.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.gb.cs index bb805ab27..fb368d0f3 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.gb.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/GeoJSONLayer.gb.cs @@ -11,7 +11,7 @@ public partial class GeoJSONLayer : IBlendLayer, IDisplayFilteredLayer, IFeatureEffectLayer, IFeatureSetLayer, - IFeatureTableWidgetLayers, + IFeatureTableWidgetLayer, IFeatureTemplatesViewModelLayers, IFeatureTemplatesWidgetLayers, IInputBaseLayers, diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.cs index 147f211de..df471aa04 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.cs @@ -5,7 +5,9 @@ public partial class ImageryLayer : Layer /// public override LayerType Type => LayerType.Imagery; - + /// + public string FeatureTableLayerType => Type.ToString(); + /// /// The tiling scheme information for the layer. /// diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.gb.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.gb.cs index 298f9573c..0da4b248f 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.gb.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/ImageryLayer.gb.cs @@ -10,7 +10,7 @@ namespace dymaptic.GeoBlazor.Core.Components.Layers; /// public partial class ImageryLayer : IBlendLayer, ICustomParametersMixin, - IFeatureTableWidgetLayers, + IFeatureTableWidgetLayer, IOperationalLayer, IPortalLayer, IRasterPresetRendererMixin, diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs index c76a3ebfe..db8dd99b6 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/Layer.cs @@ -342,8 +342,24 @@ public override async Task SetParametersAsync(ParameterView parameters) break; } - Type paramType = previousValue!.GetType(); + if (previousValue is null) + { + if (kvp.Value is not null) + { + if (MapRendered) + { + await UpdateLayer(); + } + + break; + } + + // both null, no change + continue; + } + Type paramType = previousValue.GetType(); + if (paramType.IsArray) { Array prevArray = (Array)previousValue; @@ -375,9 +391,8 @@ public override async Task SetParametersAsync(ParameterView parameters) if (layerChanged) break; } - else if (paramType.IsGenericType) + else if (paramType.IsGenericType && previousValue is ICollection prevCollection) { - ICollection prevCollection = (ICollection)previousValue; ICollection currCollection = (ICollection)kvp.Value!; if (prevCollection.Count != currCollection.Count) diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/Sublayer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/Sublayer.cs index 51eeef785..e33250c1d 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/Sublayer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/Sublayer.cs @@ -1,7 +1,10 @@ namespace dymaptic.GeoBlazor.Core.Components.Layers; -public partial class Sublayer : MapComponent, IPopupTemplateLayer +public partial class Sublayer : MapComponent, IPopupTemplateLayer, IFeatureTableWidgetLayer { + /// + public string FeatureTableLayerType => nameof(Sublayer); + /// /// A SQL where clause used to filter features in the image. Only the features that satisfy the definition expression are displayed in the View. Definition expressions may be set when a Sublayer is constructed prior to it loading in the view or after it has been added to the MapImageLayer. To see if you can use this property, check the supportsSublayerDefinitionExpression property of MapImageLayer.capabilities. /// diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.cs index 676af5110..862a0ba1c 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.cs @@ -4,6 +4,9 @@ public partial class WFSLayer { // Add custom code to this file to override generated code + /// + public string FeatureTableLayerType => Type.ToString(); + /// public override async Task RegisterChildComponent(MapComponent child) { diff --git a/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.gb.cs b/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.gb.cs index 48534514e..acd5a77f7 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.gb.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Layers/WFSLayer.gb.cs @@ -13,7 +13,7 @@ public partial class WFSLayer : Layer, IFeatureEffectLayer, IFeatureReductionLayer, IFeatureSetLayer, - IFeatureTableWidgetLayers, + IFeatureTableWidgetLayer, IOperationalLayer, IOrderedLayer, IPortalLayer, diff --git a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs index 51d291f2c..0a36b47b6 100644 --- a/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs +++ b/src/dymaptic.GeoBlazor.Core/Components/Widgets/Widget.razor.cs @@ -417,10 +417,101 @@ public override async Task SetParametersAsync(ParameterView parameters) continue; } - if (!PreviousParameters.TryGetValue(kvp.Key, out object? previousValue) - || (!kvp.Value?.Equals(previousValue) ?? true)) + if (!PreviousParameters.TryGetValue(kvp.Key, out object? previousValue)) { - await UpdateWidget(); + if (MapRendered) + { + await UpdateWidget(); + } + + break; + } + + if (previousValue is null) + { + if (kvp.Value is not null) + { + if (MapRendered) + { + await UpdateWidget(); + } + + break; + } + + // both null, no change + continue; + } + + Type paramType = previousValue.GetType(); + + if (paramType.IsArray) + { + Array prevArray = (Array)previousValue; + Array currArray = (Array)kvp.Value!; + + if (prevArray.Length != currArray.Length) + { + if (MapRendered) + { + await UpdateWidget(); + } + + break; + } + + for (int i = 0; i < prevArray.Length; i++) + { + if (!Equals(prevArray.GetValue(i), currArray.GetValue(i))) + { + if (MapRendered) + { + await UpdateWidget(); + } + + break; + } + } + } + else if (paramType.IsGenericType && previousValue is ICollection prevCollection) + { + ICollection currCollection = (ICollection)kvp.Value!; + + if (prevCollection.Count != currCollection.Count) + { + if (MapRendered) + { + await UpdateWidget(); + } + + break; + } + + IEnumerator prevEnumerator = prevCollection.GetEnumerator(); + using var prevEnumerator1 = prevEnumerator as IDisposable; + IEnumerator currEnumerator = currCollection.GetEnumerator(); + using var currEnumerator1 = currEnumerator as IDisposable; + + while (prevEnumerator.MoveNext() && currEnumerator.MoveNext()) + { + if (!Equals(prevEnumerator.Current, currEnumerator.Current)) + { + if (MapRendered) + { + await UpdateWidget(); + } + + break; + } + } + } + else if (!kvp.Value?.Equals(previousValue) ?? true) + { + if (MapRendered) + { + await UpdateWidget(); + } + break; } } diff --git a/src/dymaptic.GeoBlazor.Core/Events/DomPointerEvent.cs b/src/dymaptic.GeoBlazor.Core/Events/DomPointerEvent.cs index e9ddd0b1d..659813c45 100644 --- a/src/dymaptic.GeoBlazor.Core/Events/DomPointerEvent.cs +++ b/src/dymaptic.GeoBlazor.Core/Events/DomPointerEvent.cs @@ -175,4 +175,70 @@ bool ShiftKey /// /// Interface for DOM UI events (keyboard, mouse, touch). /// -public interface IDomUiEvent; \ No newline at end of file +[JsonConverter(typeof(DomUiEventConverter))] +public interface IDomUiEvent; + +internal class DomUiEventConverter : JsonConverter +{ + public override IDomUiEvent? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + Utf8JsonReader cloneReader = reader; + Dictionary? temp = JsonSerializer + .Deserialize>(ref cloneReader, options); + + if (temp is null) + { + return null; + } + + PropertyInfo[] pointerProps = typeof(DomPointerEvent).GetProperties(); + PropertyInfo[] mouseProps = typeof(DomMouseEvent).GetProperties(); + PropertyInfo[] keyboardProps = typeof(DomKeyboardEvent).GetProperties(); + + pointerProps = pointerProps + .Where(p => mouseProps.All(mp => mp.Name != p.Name) + && keyboardProps.All(kp => kp.Name != p.Name)) + .ToArray(); + + mouseProps = mouseProps + .Where(p => pointerProps.All(pp => pp.Name != p.Name) + && keyboardProps.All(kp => kp.Name != p.Name)) + .ToArray(); + + keyboardProps = keyboardProps + .Where(p => pointerProps.All(pp => pp.Name != p.Name) + && mouseProps.All(mp => mp.Name != p.Name)) + .ToArray(); + + foreach (PropertyInfo prop in pointerProps) + { + if (temp.ContainsKey(prop.Name.ToLowerFirstChar())) + { + return JsonSerializer.Deserialize(ref reader, options); + } + } + + foreach (PropertyInfo prop in mouseProps) + { + if (temp.ContainsKey(prop.Name.ToLowerFirstChar())) + { + return JsonSerializer.Deserialize(ref reader, options); + } + } + + foreach (PropertyInfo prop in keyboardProps) + { + if (temp.ContainsKey(prop.Name.ToLowerFirstChar())) + { + return JsonSerializer.Deserialize(ref reader, options); + } + } + + return null; + } + + public override void Write(Utf8JsonWriter writer, IDomUiEvent value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, value, typeof(object), options); + } +} \ No newline at end of file diff --git a/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayer.cs b/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayer.cs new file mode 100644 index 000000000..04ae405b5 --- /dev/null +++ b/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayer.cs @@ -0,0 +1,12 @@ +namespace dymaptic.GeoBlazor.Core.Interfaces; + +[JsonConverter(typeof(MultiTypeConverter))] +public partial interface IFeatureTableWidgetLayer +{ + // Add custom code to this file to override generated code + + /// + /// Identifies the type of feature table layer. + /// + string FeatureTableLayerType { get; } +} diff --git a/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayers.gb.cs b/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayer.gb.cs similarity index 91% rename from src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayers.gb.cs rename to src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayer.gb.cs index 3a83f94da..6cd617beb 100644 --- a/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayers.gb.cs +++ b/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayer.gb.cs @@ -7,6 +7,6 @@ namespace dymaptic.GeoBlazor.Core.Interfaces; /// An array of layers listed within the dropdown component of the table's header. /// ArcGIS Maps SDK for JavaScript /// -public partial interface IFeatureTableWidgetLayers : IMapComponent +public partial interface IFeatureTableWidgetLayer : IMapComponent { } diff --git a/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayers.cs b/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayers.cs deleted file mode 100644 index 2fa495b0c..000000000 --- a/src/dymaptic.GeoBlazor.Core/Interfaces/IFeatureTableWidgetLayers.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace dymaptic.GeoBlazor.Core.Interfaces; - -[JsonConverter(typeof(MultiTypeConverter))] -public partial interface IFeatureTableWidgetLayers -{ - // Add custom code to this file to override generated code -} \ No newline at end of file diff --git a/src/dymaptic.GeoBlazor.Core/Serialization/SizeVariableConverter.cs b/src/dymaptic.GeoBlazor.Core/Serialization/SizeVariableConverter.cs index 4031e22ae..b0427abdb 100644 --- a/src/dymaptic.GeoBlazor.Core/Serialization/SizeVariableConverter.cs +++ b/src/dymaptic.GeoBlazor.Core/Serialization/SizeVariableConverter.cs @@ -135,7 +135,8 @@ internal class SizeVariableConverter : JsonConverter public override void Write(Utf8JsonWriter writer, SizeVariable value, JsonSerializerOptions options) { PropertyInfo[] props = value.GetPropertyInfos() - .Where(p => p.SetMethod is not null) + .Where(p => p.SetMethod is not null + && !_excludedProperties.Contains(p.Name)) .ToArray(); writer.WriteStartObject(); @@ -214,4 +215,11 @@ public override void Write(Utf8JsonWriter writer, SizeVariable value, JsonSerial return (dimension, sizeVariable); } + + private string[] _excludedProperties = + [ + nameof(MapComponent.Parent), + nameof(MapComponent.View), + nameof(MapComponent.Layer) + ]; } \ No newline at end of file