feat: Implement Gogh Theme Engine with options page, theme parsing, and semantic theme derivation

We're cooked. <skull emoji>

- Added options page for YAML palette editing, live color preview, and diagnostics.
- Implemented theme engine to parse Gogh YAML palettes and derive semantic themes.
- Configured TypeScript and Vite for building the extension.
- Created new tab and popup HTML pages with corresponding scripts and styles.
- Established storage management for user configurations in Chrome storage.
- Added icons for the extension and updated manifest for MV3 compatibility.
This commit is contained in:
2026-03-03 23:11:08 +05:30
commit 6cdc79e345
45 changed files with 5817 additions and 0 deletions

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<rect width="128" height="128" rx="20" fill="#282a36"/>
<text x="64" y="80" font-family="Arial, sans-serif" font-size="64" text-anchor="middle" fill="#f8f8f2">G</text>
<circle cx="96" cy="32" r="12" fill="#ff79c6"/>
<circle cx="96" cy="32" r="6" fill="#bd93f9"/>
</svg>

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

View File

@@ -0,0 +1,33 @@
{
"manifest_version": 3,
"name": "Gogh Theme Engine",
"version": "1.0.0",
"description": "Apply Gogh-style 16-color terminal palettes to any web page using perceptual OKLCH color remapping.",
"permissions": ["storage", "activeTab", "scripting"],
"background": {
"service_worker": "background.js",
"type": "module"
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"],
"run_at": "document_start",
"all_frames": true
}
],
"options_page": "options/options.html",
"action": {
"default_title": "Gogh Theme Engine",
"default_icon": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
},
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
}