mirror of
https://github.com/ivuorinen/everforest-resources.git
synced 2026-01-26 11:13:59 +00:00
feat: initial scaffold and generator
- Complete project structure with directories for all target platforms - Template system for CLI tools with color placeholder replacement - Working generator that processes templates for 6 theme variants - GitHub workflows for build, snapshots, commitlint, and cli-verify - Installer and verifier scripts for CLI tool deployment - Comprehensive documentation and specifications - Biome 2.x linting and formatting setup - Husky git hooks for pre-commit validation
This commit is contained in:
55
web/css/everforest.css
Normal file
55
web/css/everforest.css
Normal file
@@ -0,0 +1,55 @@
|
||||
/* Everforest CSS Variables */
|
||||
/* Generated from template - do not edit manually */
|
||||
|
||||
:root {
|
||||
/* Dark theme (default) */
|
||||
--everforest-bg: #2f383e;
|
||||
--everforest-bg1: #374247;
|
||||
--everforest-bg2: #404c51;
|
||||
--everforest-fg: #d3c6aa;
|
||||
--everforest-red: #e67e80;
|
||||
--everforest-orange: #e69875;
|
||||
--everforest-yellow: #dbbc7f;
|
||||
--everforest-green: #a7c080;
|
||||
--everforest-aqua: #83c092;
|
||||
--everforest-blue: #7fbbb3;
|
||||
--everforest-purple: #d699b6;
|
||||
--everforest-gray1: #7a8478;
|
||||
--everforest-gray2: #859289;
|
||||
--everforest-gray3: #9da9a0;
|
||||
}
|
||||
|
||||
/* Light theme */
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
--everforest-bg: #f3ead3;
|
||||
--everforest-bg1: #ede6cf;
|
||||
--everforest-bg2: #e8e3cc;
|
||||
--everforest-fg: #5c6a72;
|
||||
--everforest-gray1: #a6b0a0;
|
||||
--everforest-gray2: #b3c0b0;
|
||||
--everforest-gray3: #c0cdb8;
|
||||
}
|
||||
}
|
||||
|
||||
/* Force dark theme */
|
||||
[data-theme="dark"] {
|
||||
--everforest-bg: #2f383e;
|
||||
--everforest-bg1: #374247;
|
||||
--everforest-bg2: #404c51;
|
||||
--everforest-fg: #d3c6aa;
|
||||
--everforest-gray1: #7a8478;
|
||||
--everforest-gray2: #859289;
|
||||
--everforest-gray3: #9da9a0;
|
||||
}
|
||||
|
||||
/* Force light theme */
|
||||
[data-theme="light"] {
|
||||
--everforest-bg: #f3ead3;
|
||||
--everforest-bg1: #ede6cf;
|
||||
--everforest-bg2: #e8e3cc;
|
||||
--everforest-fg: #5c6a72;
|
||||
--everforest-gray1: #a6b0a0;
|
||||
--everforest-gray2: #b3c0b0;
|
||||
--everforest-gray3: #c0cdb8;
|
||||
}
|
||||
27
web/demo/demo.js
Normal file
27
web/demo/demo.js
Normal file
@@ -0,0 +1,27 @@
|
||||
// Everforest Demo JavaScript
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const themeControls = document.querySelectorAll('input[name="theme"]');
|
||||
const body = document.body;
|
||||
|
||||
// Theme switching functionality
|
||||
themeControls.forEach(control => {
|
||||
control.addEventListener('change', function() {
|
||||
const theme = this.value;
|
||||
|
||||
// Remove existing theme attributes
|
||||
body.removeAttribute('data-theme');
|
||||
|
||||
// Apply new theme
|
||||
if (theme !== 'auto') {
|
||||
body.setAttribute('data-theme', theme);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Initialize with auto theme
|
||||
const autoControl = document.querySelector('input[value="auto"]');
|
||||
if (autoControl) {
|
||||
autoControl.checked = true;
|
||||
}
|
||||
});
|
||||
66
web/demo/index.html
Normal file
66
web/demo/index.html
Normal file
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Everforest Theme Demo</title>
|
||||
<link rel="stylesheet" href="../css/everforest.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>Everforest Color Scheme</h1>
|
||||
<div class="theme-controls">
|
||||
<label>
|
||||
<input type="radio" name="theme" value="auto" checked>
|
||||
Auto
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="theme" value="dark">
|
||||
Dark
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="theme" value="light">
|
||||
Light
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="color-palette">
|
||||
<h2>Color Palette</h2>
|
||||
<div class="colors">
|
||||
<div class="color-swatch" data-color="bg">Background</div>
|
||||
<div class="color-swatch" data-color="bg1">Background 1</div>
|
||||
<div class="color-swatch" data-color="bg2">Background 2</div>
|
||||
<div class="color-swatch" data-color="fg">Foreground</div>
|
||||
<div class="color-swatch" data-color="red">Red</div>
|
||||
<div class="color-swatch" data-color="orange">Orange</div>
|
||||
<div class="color-swatch" data-color="yellow">Yellow</div>
|
||||
<div class="color-swatch" data-color="green">Green</div>
|
||||
<div class="color-swatch" data-color="aqua">Aqua</div>
|
||||
<div class="color-swatch" data-color="blue">Blue</div>
|
||||
<div class="color-swatch" data-color="purple">Purple</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="code-sample">
|
||||
<h2>Code Sample</h2>
|
||||
<pre><code>// Everforest theme example
|
||||
function generateTheme(variant, contrast) {
|
||||
const colors = {
|
||||
background: '#2f383e',
|
||||
foreground: '#d3c6aa',
|
||||
accent: '#a7c080'
|
||||
};
|
||||
|
||||
return processTemplate(colors);
|
||||
}</code></pre>
|
||||
</section>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="demo.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
94
web/demo/style.css
Normal file
94
web/demo/style.css
Normal file
@@ -0,0 +1,94 @@
|
||||
/* Everforest Demo Styles */
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
|
||||
background-color: var(--everforest-bg);
|
||||
color: var(--everforest-fg);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
header {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: var(--everforest-green);
|
||||
margin: 0 0 1rem 0;
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: var(--everforest-blue);
|
||||
margin: 0 0 1rem 0;
|
||||
}
|
||||
|
||||
.theme-controls {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.theme-controls label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.theme-controls input[type="radio"] {
|
||||
accent-color: var(--everforest-aqua);
|
||||
}
|
||||
|
||||
.color-palette {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.colors {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.color-swatch {
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--everforest-gray1);
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.color-swatch[data-color="bg"] { background-color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="bg1"] { background-color: var(--everforest-bg1); }
|
||||
.color-swatch[data-color="bg2"] { background-color: var(--everforest-bg2); }
|
||||
.color-swatch[data-color="fg"] { background-color: var(--everforest-fg); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="red"] { background-color: var(--everforest-red); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="orange"] { background-color: var(--everforest-orange); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="yellow"] { background-color: var(--everforest-yellow); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="green"] { background-color: var(--everforest-green); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="aqua"] { background-color: var(--everforest-aqua); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="blue"] { background-color: var(--everforest-blue); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="purple"] { background-color: var(--everforest-purple); color: var(--everforest-bg); }
|
||||
|
||||
.code-sample pre {
|
||||
background-color: var(--everforest-bg1);
|
||||
padding: 1.5rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--everforest-gray1);
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.code-sample code {
|
||||
color: var(--everforest-fg);
|
||||
}
|
||||
Reference in New Issue
Block a user