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

42
common/storage.test.js Normal file
View File

@@ -0,0 +1,42 @@
import * as storageModule from "./storage";
const get = jest.fn();
const set = jest.fn();
global.chrome = {
storage: {
sync: {
set,
get
}
}
};
const chromeGetStorageSpy = jest.spyOn(chrome.storage.sync, 'get');
const chromeSetStorageSpy = jest.spyOn(chrome.storage.sync, 'set');
describe("storage → getStorage", () => {
beforeEach(() => {
jest.resetAllMocks();
});
test("chrome get storage api method called", () => {
const getCallback = jest.fn();
storageModule.getStorage("Test", getCallback);
expect(chromeGetStorageSpy).toHaveBeenCalledWith(["Test"], expect.any(Function));
});
});
describe("storage → setStorage", () => {
beforeEach(() => {
jest.resetAllMocks();
});
test("chrome set storage api method called", () => {
storageModule.setStorage("Test", "Value");
expect(chromeSetStorageSpy).toHaveBeenCalledWith({["Test"]: "Value"});
});
});