diff --git a/samples/KristofferStrube.Blazor.Window.WasmExample/Layout/NavMenu.razor b/samples/KristofferStrube.Blazor.Window.WasmExample/Layout/NavMenu.razor
index a9136e3..2caee8a 100644
--- a/samples/KristofferStrube.Blazor.Window.WasmExample/Layout/NavMenu.razor
+++ b/samples/KristofferStrube.Blazor.Window.WasmExample/Layout/NavMenu.razor
@@ -30,6 +30,16 @@
Events
+
+
+
+ API Coverage Status
+
+
diff --git a/samples/KristofferStrube.Blazor.Window.WasmExample/Pages/Status.razor b/samples/KristofferStrube.Blazor.Window.WasmExample/Pages/Status.razor
new file mode 100644
index 0000000..f08579d
--- /dev/null
+++ b/samples/KristofferStrube.Blazor.Window.WasmExample/Pages/Status.razor
@@ -0,0 +1,357 @@
+@page "/Status"
+
+@inject HttpClient HttpClient
+@inject IJSRuntime JSRuntime
+
+Blazor Window - Status
+
+
+ @for (int i = 0; i < compareLines.Count; i++)
+ {
+ @($"{new string(' ', 3 - i.ToString().Length)}{i}") @compareLines[i].text
+ }
+
+
+@code {
+ private List<(string text, string color)> compareLines = [];
+
+ protected override void OnInitialized()
+ {
+ compareLines = [];
+ var lines = webIDL.Split('\n');
+ for (int i = 0; i < lines.Count(); i++)
+ {
+ var color = supportedRows.Any(interval => i >= interval.start && i <= interval.end) ? "lightgreen" : "pink";
+ compareLines.Add((lines[i], color));
+ }
+ }
+
+ private (int start, int end)[] supportedRows = new (int start, int end)[] {
+ (0, 1),
+ (3, 6),
+ (30, 31),
+ (33, 33),
+ (45, 49),
+ (53, 53),
+ (57, 58),
+ (60, 62),
+ (164, 164),
+ (194, 194),
+ (220, 222),
+ (242, 242),
+ (248, 248),
+ (263, 264),
+ (267, 267),
+ };
+
+ private const string webIDL = @"[Global=Window,
+ Exposed=Window,
+ LegacyUnenumerableNamedProperties]
+interface Window : EventTarget {
+ // the current browsing context
+ [LegacyUnforgeable] readonly attribute WindowProxy window;
+ [Replaceable] readonly attribute WindowProxy self;
+ [LegacyUnforgeable] readonly attribute Document document;
+ attribute DOMString name;
+ [PutForwards=href, LegacyUnforgeable] readonly attribute Location location;
+ readonly attribute History history;
+ readonly attribute Navigation navigation;
+ readonly attribute CustomElementRegistry customElements;
+ [Replaceable] readonly attribute BarProp locationbar;
+ [Replaceable] readonly attribute BarProp menubar;
+ [Replaceable] readonly attribute BarProp personalbar;
+ [Replaceable] readonly attribute BarProp scrollbars;
+ [Replaceable] readonly attribute BarProp statusbar;
+ [Replaceable] readonly attribute BarProp toolbar;
+ attribute DOMString status;
+ undefined close();
+ readonly attribute boolean closed;
+ undefined stop();
+ undefined focus();
+ undefined blur();
+
+ // other browsing contexts
+ [Replaceable] readonly attribute WindowProxy frames;
+ [Replaceable] readonly attribute unsigned long length;
+ [LegacyUnforgeable] readonly attribute WindowProxy? top;
+ attribute any opener;
+ [Replaceable] readonly attribute WindowProxy? parent;
+ readonly attribute Element? frameElement;
+ WindowProxy? open(optional USVString url = """", optional DOMString target = ""_blank"", optional [LegacyNullToEmptyString] DOMString features = """");
+
+ // Since this is the global object, the IDL named getter adds a NamedPropertiesObject exotic
+ // object on the prototype chain. Indeed, this does not make the global object an exotic object.
+ // Indexed access is taken care of by the WindowProxy exotic object.
+ getter object (DOMString name);
+
+ // the user agent
+ readonly attribute Navigator navigator;
+ [Replaceable] readonly attribute Navigator clientInformation; // legacy alias of .navigator
+ readonly attribute boolean originAgentCluster;
+
+ // user prompts
+ undefined alert();
+ undefined alert(DOMString message);
+ boolean confirm(optional DOMString message = """");
+ DOMString? prompt(optional DOMString message = """", optional DOMString default = """");
+ undefined print();
+
+ undefined postMessage(any message, USVString targetOrigin, optional sequence