diff --git a/src/components/Header.js b/src/components/Header.js
new file mode 100644
index 0000000..d37d3a7
--- /dev/null
+++ b/src/components/Header.js
@@ -0,0 +1,40 @@
+const HEADER_LOGO = `
+
+`;
+
+export const createHeader = () => {
+ const header = document.createElement("header");
+ header.classList.add("cv-header");
+
+ header.innerHTML = HEADER_LOGO;
+ const logo = header.querySelector("svg");
+ logo.classList.add("cv-header__logo");
+
+ const title = document.createElement("h1");
+ title.classList.add("cv-header__title");
+ title.innerText = "Carbon Visualizer";
+ header.append(title);
+
+ return header;
+}
diff --git a/src/core/Panel.js b/src/core/Panel.js
index 2dde2a1..d821e23 100644
--- a/src/core/Panel.js
+++ b/src/core/Panel.js
@@ -42,6 +42,9 @@ class Panel {
// Load panel-specific JavaScript
await this.loadPanelJS();
+
+ // Load universal components
+ await this.loadHeader();
}
async loadPanelHTML() {
@@ -96,6 +99,20 @@ class Panel {
}
}
+ async loadHeader() {
+ try {
+ // Import component module and insert onto the page
+ const componentUrl = this.browserAPI.runtime.getURL('src/components/Header.js');
+ const componentModule = await import(componentUrl);
+
+ const header = componentModule.createHeader();
+ const fallbackHeader = this.container.querySelector('header.cv-header');
+ fallbackHeader.replaceWith(header);
+ } catch (error) {
+ console.error(error);
+ }
+ }
+
async waitForElements() {
// Wait a small amount for DOM to be ready
await new Promise(resolve => setTimeout(resolve, 50));
@@ -120,8 +137,8 @@ class Panel {
getFallbackHTML() {
return `
-