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 = ` + + {/* Leaf */} + + {/* Leaf vein */} + + {/* Small bar chart at bottom */} + + + + + + + +`; + +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 ` -
-

Carbon Visualizer - ${this.type}

+
+

Carbon Visualizer - ${this.type}

Panel content for ${this.type}

diff --git a/src/panels/results/results.html b/src/panels/results/results.html index 4359767..bb4d473 100644 --- a/src/panels/results/results.html +++ b/src/panels/results/results.html @@ -6,8 +6,8 @@
-
-

Carbon Visualizer

+
+

Carbon Visualizer

diff --git a/src/panels/welcome/welcome.html b/src/panels/welcome/welcome.html index 4712fb6..c42ec89 100644 --- a/src/panels/welcome/welcome.html +++ b/src/panels/welcome/welcome.html @@ -6,8 +6,8 @@
-
-

Carbon Visualizer

+
+

Carbon Visualizer

diff --git a/src/styles/core.css b/src/styles/core.css index 83f5c27..3644fec 100644 --- a/src/styles/core.css +++ b/src/styles/core.css @@ -43,16 +43,28 @@ } /* Panel header */ -.cv-panel__header { - padding: 1rem 1.5rem 0.5rem; - border-bottom: 1px solid var(--cv-white); +.cv-header { + display: flex; + gap: 1rem; + align-items: center; + padding: 1rem 1.5rem; + /* TODO: The `border-bottom` color is equal to `--cv-color-gray-50` and should be replaced with the variable when implemented */ + border-bottom: 1px solid oklch(from oklch(50.0% 0.000 0) 50% calc(0 + (sin(0.6 * pi) * c)) h); + background-color: var(--cv-white); +} + +.cv-header__logo { + --header-logo-dimensions: 2rem; + + width: var(--header-logo-dimensions); + height: var(--header-logo-dimensions); } -.cv-panel__title { +.cv-header__title { margin: 0; font-size: 1.125rem; font-weight: 600; - color: var(--cv-white); + color: var(--cv-black); } /* Panel content */