{"id":51226677,"url":"https://github.com/filcuk/pbi-theme-customiser","last_synced_at":"2026-06-28T12:05:39.874Z","repository":{"id":342563833,"uuid":"1174375434","full_name":"filcuk/pbi-theme-customiser","owner":"filcuk","description":"An easier way to adjust theme colours with advanced editing features","archived":false,"fork":false,"pushed_at":"2026-04-16T19:25:40.000Z","size":853,"stargazers_count":3,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-16T21:25:16.620Z","etag":null,"topics":["colour","customiser","generator","json","microsoft","palette","powerbi","svg","theme"],"latest_commit_sha":null,"homepage":"https://filcuk.github.io/pbi-theme-customiser/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filcuk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-06T11:20:28.000Z","updated_at":"2026-04-16T19:33:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/filcuk/pbi-theme-customiser","commit_stats":null,"previous_names":["filcuk/colour-palette-generator","filcuk/pbi-theme-customiser"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/filcuk/pbi-theme-customiser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filcuk%2Fpbi-theme-customiser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filcuk%2Fpbi-theme-customiser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filcuk%2Fpbi-theme-customiser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filcuk%2Fpbi-theme-customiser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filcuk","download_url":"https://codeload.github.com/filcuk/pbi-theme-customiser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filcuk%2Fpbi-theme-customiser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34887405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["colour","customiser","generator","json","microsoft","palette","powerbi","svg","theme"],"created_at":"2026-06-28T12:05:39.210Z","updated_at":"2026-06-28T12:05:39.869Z","avatar_url":"https://github.com/filcuk.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"res/logo.svg\" width=\"32\"\u003e Power BI Theme Customiser: [Launch](https://filcuk.github.io/pbi-theme-customiser/)\n![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/filcuk/pbi-theme-customiser)\n ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues-pr/filcuk/pbi-theme-customiser)\n ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/filcuk/pbi-theme-customiser/playwright.yml?label=tests) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/filcuk/pbi-theme-customiser/pages%2Fpages-build-deployment?label=deployment)\n\n\u003e [!IMPORTANT]\n\u003e This project is almost entirely vibe-coded.\n\nA theme/colour palette generator, predominantly for use in [MS Power BI](https://www.microsoft.com/en-us/power-platform/products/power-bi).\n\n## Features\n- **🧮 Variable colour count**: pick how many theme colours you need\n- **📊 Sentiment, divergent and structural colours**: with gradient preview \u0026 export\n- **⌨️ Flexible inputs**: including HEX, RGB, CYMK, colour picker, and predefined colour sets\n- **🔲 Contrast checks**: validation for black and white text at 4.5:1 or higher\n- **🎨 Theme management**: using browser local storage with automatic saving\n- **⌛ Undo**: step back through colour changes and other actions\n- **📤 Export with preview**: SVG image and Power BI JSON theme file\n- **📥 Import**: restore from exported JSON/SVG or a standard Power BI theme JSON\n- **🔗 Share via URL**: forward the link; the address bar holds the current theme state\n\n\u003e [!TIP]\n\u003e Tested on Firefox. Please submit any issues or suggestions [here](https://github.com/filcuk/pbi-theme-customiser/issues).\n\n## Preview\n![Theme management](res/preview/theme_management.webp)\n![Colour swatches](res/preview/colour_swatches.webp)\n![Import/export](res/preview/import_export.webp)\n\n*Preview images created with the help of [moocup.jaydip.me](https://moocup.jaydip.me/)*\n\n# Development\n## Project layout\n\n| Path | Role |\n|------|------|\n| `index.html` | Page markup |\n| `css/styles.css` | Styles |\n| `js/main.js` | App entry: DOM refs, wiring, bootstrap |\n| `js/state.js` | Palette state, persistence, URL hash |\n| `js/ui.js` | Swatches, contrast summary, slider, optional rows, colour picker |\n| `js/themes.js` | Saved named themes (localStorage) |\n| `js/import-export.js` | JSON/SVG preview, copy, download, file + drag/drop import |\n| `js/colour-math.js` | Hex / RGB / HSV / CMYK / contrast helpers |\n| `js/colour-export.js` | JSON + SVG export (shared with unit tests) |\n\n## Run locally\n\nThe page loads **ES modules** (`\u003cscript type=\"module\" src=\"js/main.js\"\u003e`). Most browsers **do not** allow module scripts from `file://` URLs, so opening `index.html` by double‑clicking it will fail with a console error like “Module source URI is not allowed in this document”.\n\nFrom the repo root:\n\n```bash\nnpm install\nnpm start\n```\n\nThat serves the project on **http://127.0.0.1:8080** and opens your browser. To serve without opening a tab, use `npm run serve` instead.\n\n## Testing\n\n**Prerequisites:** [Node.js](https://nodejs.org/) (includes `npm`).\n\n### Unit tests (Vitest)\n\nJSON and SVG export behaviour is implemented in `js/colour-export.js` and covered by `tests/unit/export.test.js`.\n\n| Command | What it does |\n|--------|----------------|\n| `npm run test` | Run unit tests once (CI default). |\n| `npm run test:watch` | Re-run unit tests when files change. |\n\n### End-to-end tests (Playwright)\n\nE2E tests live in `tests/e2e/`. Playwright starts a local static server for the repo root (so `index.html` and `js/` are served automatically); you do not need a separate dev server.\n\n**One-time setup**\n\n```bash\nnpm install\nnpx playwright install chromium\n```\n\n| Command | What it does |\n|--------|----------------|\n| `npm run test:e2e` | Run all E2E tests (headless Chromium). |\n| `npm run test:e2e:ui` | Open the Playwright UI to pick tests and watch runs. |\n| `npm run test:e2e:headed` | Run with a visible browser window. |\n| `npm run test:e2e:debug` | Step through tests with the Playwright inspector. |\n\nAfter an E2E run, an HTML report may appear under `playwright-report/` (open `index.html` in a browser to view it).\n\n**CI:** Pushes and pull requests to `main` run unit tests and E2E tests via GitHub Actions (`.github/workflows/playwright.yml`). Failed E2E runs upload the Playwright report as an artifact.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilcuk%2Fpbi-theme-customiser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilcuk%2Fpbi-theme-customiser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilcuk%2Fpbi-theme-customiser/lists"}