Création du projet
This commit is contained in:
commit
c0966d32cb
12 changed files with 223 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
/.idea/*
|
||||||
|
dist/*
|
||||||
1
.nvmrc
Normal file
1
.nvmrc
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
20
|
||||||
4
1-figma/readme.md
Normal file
4
1-figma/readme.md
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
# TODO
|
||||||
|
|
||||||
|
Expliquer le fonctionnement de l'import depuis figma
|
||||||
|
|
||||||
7
2-tokens/1-src/color.json
Normal file
7
2-tokens/1-src/color.json
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"color": {
|
||||||
|
"primary": "#7cbb53",
|
||||||
|
"secondary": "#1d6c87",
|
||||||
|
"danger": "#c71c22"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
2-tokens/2-generated/color.css
Normal file
9
2-tokens/2-generated/color.css
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
:root {
|
||||||
|
--color-primary: #1D6C87;
|
||||||
|
--color-secondary: #DD5600;
|
||||||
|
--color-success: #7CBB53;
|
||||||
|
--color-danger: #C71C22;
|
||||||
|
--color-warning: #DD5600;
|
||||||
|
--color-dark: #000000;
|
||||||
|
--color-light: #FFFFFF;
|
||||||
|
}
|
||||||
9
2-tokens/overrides.css
Normal file
9
2-tokens/overrides.css
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
:root {
|
||||||
|
--color-primary-runtime: var(--ingeli-primary-override, var(--color-primary));
|
||||||
|
--color-secondary-runtime: var(--ingeli-secondary-override, var(--color-secondary));
|
||||||
|
--color-success-runtime: var(--ingeli-success-override, var(--color-success));
|
||||||
|
--color-warning-runtime: var(--ingeli-warning-override, var(--color-warning));
|
||||||
|
--color-danger-runtime: var(--ingeli-danger-override, var(--color-danger));
|
||||||
|
--color-dark-runtime: var(--ingeli-dark-override, var(--color-dark));
|
||||||
|
--color-light-runtime: var(--ingeli-light-override, var(--color-light));
|
||||||
|
}
|
||||||
14
3-styles/ingeli-std/1-behaviors/color.behavior.css
Normal file
14
3-styles/ingeli-std/1-behaviors/color.behavior.css
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* par défaut (aucune classe couleur) */
|
||||||
|
:root {
|
||||||
|
--button-bg: #e0e0e0;
|
||||||
|
--button-text: #000;
|
||||||
|
--button-border: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* mapping behavior → tokens */
|
||||||
|
[class^="istd-color-"],
|
||||||
|
[class*=" istd-color-"] {
|
||||||
|
--button-bg: var(--_color);
|
||||||
|
--button-text: color-contrast(var(--_color) vs black, white);
|
||||||
|
--button-border: color-mix(in srgb, var(--_color) 80%, black);
|
||||||
|
}
|
||||||
7
3-styles/ingeli-std/1-behaviors/color.values.css
Normal file
7
3-styles/ingeli-std/1-behaviors/color.values.css
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
.istd-color-primary { --_color: var(--color-primary-runtime); }
|
||||||
|
.istd-color-secondary { --_color: var(--color-secondary-runtime); }
|
||||||
|
.istd-color-success { --_color: var(--color-success-runtime); }
|
||||||
|
.istd-color-warning { --_color: var(--color-warning-runtime); }
|
||||||
|
.istd-color-danger { --_color: var(--color-danger-runtime); }
|
||||||
|
.istd-color-dark { --_color: var(--color-dark-runtime); }
|
||||||
|
.istd-color-light { --_color: var(--color-light-runtime); }
|
||||||
4
3-styles/ingeli-std/2-components/button.css
Normal file
4
3-styles/ingeli-std/2-components/button.css
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
.istd-co-button {
|
||||||
|
background: var(--button-bg);
|
||||||
|
color: var(--button-text);
|
||||||
|
}
|
||||||
90
5-build/build-css.js
Normal file
90
5-build/build-css.js
Normal file
|
|
@ -0,0 +1,90 @@
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
const [ , , clientName, variantName ] = process.argv;
|
||||||
|
|
||||||
|
if (!clientName || !variantName) {
|
||||||
|
console.error("❌ Usage: node build-css.js <client> <variant>");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const ROOT = process.cwd();
|
||||||
|
|
||||||
|
const DIST_DIR = path.join(
|
||||||
|
ROOT,
|
||||||
|
"dist",
|
||||||
|
clientName,
|
||||||
|
variantName
|
||||||
|
);
|
||||||
|
|
||||||
|
const OUTPUT_FILE = path.join(DIST_DIR, "min.css");
|
||||||
|
|
||||||
|
const SOURCES = [
|
||||||
|
// 1. Tokens
|
||||||
|
"2-tokens/2-generated",
|
||||||
|
"2-tokens/overrides.css",
|
||||||
|
|
||||||
|
// 2. Framework
|
||||||
|
"3-styles/ingeli-std/1-behaviors",
|
||||||
|
"3-styles/ingeli-std/2-components",
|
||||||
|
"3-styles/ingeli-std/utilities",
|
||||||
|
|
||||||
|
"3-styles/ingeli-ils/1-behaviors",
|
||||||
|
"3-styles/ingeli-ils/2-components",
|
||||||
|
"3-styles/ingeli-ils/utilities",
|
||||||
|
|
||||||
|
"3-styles/cloud-engine/1-behaviors",
|
||||||
|
"3-styles/cloud-engine/2-components",
|
||||||
|
"3-styles/cloud-engine/utilities",
|
||||||
|
|
||||||
|
// 3. Client commons
|
||||||
|
`4-clients/${clientName}/1-commons/styles`,
|
||||||
|
|
||||||
|
// 4. Client apps
|
||||||
|
`4-clients/${clientName}/app-*/styles`,
|
||||||
|
|
||||||
|
// 5. Variant (last override)
|
||||||
|
`4-clients/${clientName}/variants/${variantName}`
|
||||||
|
];
|
||||||
|
|
||||||
|
function collectCssFiles(entry) {
|
||||||
|
const fullPath = path.join(ROOT, entry);
|
||||||
|
|
||||||
|
if (!fs.existsSync(fullPath)) return [];
|
||||||
|
|
||||||
|
const stat = fs.statSync(fullPath);
|
||||||
|
|
||||||
|
if (stat.isFile() && entry.endsWith(".css")) {
|
||||||
|
return [fullPath];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stat.isDirectory()) {
|
||||||
|
return fs.readdirSync(fullPath)
|
||||||
|
.flatMap(f => collectCssFiles(path.join(entry, f)));
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Build ---
|
||||||
|
console.log(`🔨 Building CSS`);
|
||||||
|
console.log(` Client : ${clientName}`);
|
||||||
|
console.log(` Variant : ${variantName}`);
|
||||||
|
|
||||||
|
fs.mkdirSync(DIST_DIR, { recursive: true });
|
||||||
|
|
||||||
|
const files = SOURCES.flatMap(collectCssFiles);
|
||||||
|
|
||||||
|
let output = `/* Ingeli Design System */\n`;
|
||||||
|
output += `/* Client: ${clientName} */\n`;
|
||||||
|
output += `/* Variant: ${variantName} */\n\n`;
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
console.log(" +", path.relative(ROOT, file));
|
||||||
|
output += `\n/* === ${path.relative(ROOT, file)} === */\n`;
|
||||||
|
output += fs.readFileSync(file, "utf8");
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(OUTPUT_FILE, output, "utf8");
|
||||||
|
|
||||||
|
console.log(`✅ CSS generated: ${OUTPUT_FILE}`);
|
||||||
13
package.json
Normal file
13
package.json
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"name": "ingeli-design-system",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.1.0",
|
||||||
|
"type": "module",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"build": "node 5-build/build-css.js",
|
||||||
|
"build web demo": "node 5-build/build-css.js 1-demo blank"
|
||||||
|
}
|
||||||
|
}
|
||||||
63
readme.md
Normal file
63
readme.md
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
ingeli-design-system/
|
||||||
|
├── 1-figma/
|
||||||
|
│ ├── color.tokens.json Fichier d'export brut figma verbeux, non versioné
|
||||||
|
│ └── README.md
|
||||||
|
│
|
||||||
|
├── 2-tokens/
|
||||||
|
│ ├── 1-src/
|
||||||
|
│ │ └── color.json Fichier figma converti simplié par un outils automatique (sript python)
|
||||||
|
│ │
|
||||||
|
│ ├── 2-generated/
|
||||||
|
│ │ └── color.css Fichier calculé à partir du fichier color.json
|
||||||
|
│ │
|
||||||
|
│ └── overrides.css Fichier qui fait le lien entre les variables design et les variables runtime
|
||||||
|
│
|
||||||
|
├── 3-styles/
|
||||||
|
│ ├── ingeli-std/
|
||||||
|
│ │ ├── 1-behaviors/
|
||||||
|
│ │ │ ├── color.behavior.css mapping behavior → tokens
|
||||||
|
│ │ │ └── color.values.css
|
||||||
|
│ │ │
|
||||||
|
│ │ ├── 2-components/
|
||||||
|
│ │ │ ├── panel.css
|
||||||
|
│ │ │ ├── button.css
|
||||||
|
│ │ │ ├── alert.css
|
||||||
|
│ │ │ └── tabs.css
|
||||||
|
│ │ │
|
||||||
|
│ │ ├── 3-pages/
|
||||||
|
│ │ │ └── (optionnel)
|
||||||
|
│ │ │
|
||||||
|
│ │ └── utilities/
|
||||||
|
│ │ └── helpers.css
|
||||||
|
│ ├── ingeli-ils/ Même structure que ingeli-std
|
||||||
|
│ └── cloud-engine/ Même structure que ingeli-std
|
||||||
|
│
|
||||||
|
├── 4-clients/
|
||||||
|
│ ├── client-xxx/
|
||||||
|
│ │ ├── 1-commons/
|
||||||
|
│ │ │ └── styles/ Même structure que dans le dossier 3-styles à la racine
|
||||||
|
│ │ ├── app-xxx/
|
||||||
|
│ │ │ └── styles/ Même structure que dans le dossier 3-styles à la racine
|
||||||
|
│ │ ├── app-yyy/
|
||||||
|
│ │ │ └── styles/ Même structure que dans le dossier 3-styles à la racine
|
||||||
|
│ │ └── 2-variants/
|
||||||
|
│ │ ├── variant-xxx/
|
||||||
|
│ │ └── variant-yyy/
|
||||||
|
│ │
|
||||||
|
│ └── client-yyy/
|
||||||
|
│ └── client-demo/
|
||||||
|
│
|
||||||
|
├── build/
|
||||||
|
│ ├── build-tokens.js
|
||||||
|
│ ├── build-css.js
|
||||||
|
│ └── watch.js
|
||||||
|
│
|
||||||
|
├── dist/ Fichiers à déployer dans le projet C#
|
||||||
|
│ ├── client-xxx/
|
||||||
|
│ │ ├── variant-xxx/
|
||||||
|
│ │ │ └── min.css
|
||||||
|
│ │ └── variant-yyy/
|
||||||
|
│ └── client-yyy/
|
||||||
|
│
|
||||||
|
├── package.json
|
||||||
|
└── README.md
|
||||||
Loading…
Reference in a new issue