("showPrompt", message);
+ }
+
+ public async ValueTask DisposeAsync()
+ {
+ if (moduleTask.IsValueCreated)
+ {
+ var module = await moduleTask.Value;
+ await module.DisposeAsync();
+ }
+ }
+}
diff --git a/Src/GBX.NET.Tool.Razor/GBX.NET.Tool.Razor.csproj b/Src/GBX.NET.Tool.Razor/GBX.NET.Tool.Razor.csproj
new file mode 100644
index 000000000..0069de6bd
--- /dev/null
+++ b/Src/GBX.NET.Tool.Razor/GBX.NET.Tool.Razor.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Src/GBX.NET.Tool.Razor/ToolComponent.razor b/Src/GBX.NET.Tool.Razor/ToolComponent.razor
new file mode 100644
index 000000000..9e944c71d
--- /dev/null
+++ b/Src/GBX.NET.Tool.Razor/ToolComponent.razor
@@ -0,0 +1,3 @@
+
+ This component is defined in the GBX.NET.Tool.Razor library.
+
diff --git a/Src/GBX.NET.Tool.Razor/ToolComponent.razor.css b/Src/GBX.NET.Tool.Razor/ToolComponent.razor.css
new file mode 100644
index 000000000..c6afca404
--- /dev/null
+++ b/Src/GBX.NET.Tool.Razor/ToolComponent.razor.css
@@ -0,0 +1,6 @@
+.my-component {
+ border: 2px dashed red;
+ padding: 1em;
+ margin: 1em 0;
+ background-image: url('background.png');
+}
diff --git a/Src/GBX.NET.Tool.Razor/_Imports.razor b/Src/GBX.NET.Tool.Razor/_Imports.razor
new file mode 100644
index 000000000..77285129d
--- /dev/null
+++ b/Src/GBX.NET.Tool.Razor/_Imports.razor
@@ -0,0 +1 @@
+@using Microsoft.AspNetCore.Components.Web
diff --git a/Src/GBX.NET.Tool.Razor/wwwroot/background.png b/Src/GBX.NET.Tool.Razor/wwwroot/background.png
new file mode 100644
index 000000000..e15a3bde6
Binary files /dev/null and b/Src/GBX.NET.Tool.Razor/wwwroot/background.png differ
diff --git a/Src/GBX.NET.Tool.Razor/wwwroot/exampleJsInterop.js b/Src/GBX.NET.Tool.Razor/wwwroot/exampleJsInterop.js
new file mode 100644
index 000000000..ea8d76ad2
--- /dev/null
+++ b/Src/GBX.NET.Tool.Razor/wwwroot/exampleJsInterop.js
@@ -0,0 +1,6 @@
+// This is a JavaScript module that is loaded on demand. It can export any number of
+// functions, and may import other JavaScript modules if required.
+
+export function showPrompt(message) {
+ return prompt(message, 'Type anything here');
+}
diff --git a/Src/GBX.NET.Tool/GBX.NET.Tool.csproj b/Src/GBX.NET.Tool/GBX.NET.Tool.csproj
index 964179ed5..5e214b20a 100644
--- a/Src/GBX.NET.Tool/GBX.NET.Tool.csproj
+++ b/Src/GBX.NET.Tool/GBX.NET.Tool.csproj
@@ -39,11 +39,11 @@