gulp-mu-css 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,135 @@
1
+ # µCSS (npm-Paket `gulp-mu-css`)
2
+
3
+ Node-Modul zur Kompilierung von **µCSS**-erweiterten Stylesheets — Sprites, Cursor, Farbfunktionen, eingebettetes JavaScript und PSD-basierte Bilderzeugung, gesteuert über ein Skin-Manifest. µCSS 2 ist die Adobe-unabhängige Node-Neuimplementierung des 2013 als Photoshop-Script eingeführten µCSS.
4
+
5
+ Der technische Paketname ist `gulp-mu-css` (das µ-Zeichen bereitet in npm-/git-Namen Probleme); **µCSS** ist der Anzeigename.
6
+
7
+ Das ausführliche deutsche Handbuch liegt diesem Paket als PDF bei: **`docs/microCSS.pdf`** (Markdown-Quelle unter `docs/manual/`).
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install gulp-mu-css
13
+ ```
14
+
15
+ Die Bilderzeugung (Sprite-Atlas, PSD-Rendering) nutzt das Schwesterpaket [`gulp-mu-ps`](https://www.npmjs.com/package/gulp-mu-ps), das als Abhängigkeit automatisch mitinstalliert wird.
16
+
17
+ ## Was µCSS macht
18
+
19
+ - **JavaScript im CSS-Wert** — `µ(ausdruck)` (ASCII-Alias `mu(...)`) wird ausgewertet und durch das Ergebnis ersetzt, z. B. `color: µ($.linkColor);` oder `µ($.zIndex + 10)`.
20
+ - **Direktiven mit AST-Zugriff** — `-µ: Direktive(...)` (ASCII-Alias `-mu:`) führt JavaScript mit Zugriff auf die umgebende Regel und das Dokument aus und wird aus der Ausgabe entfernt.
21
+ - **Sprite-Atlas** — `-µ: Sprite("imgs/logo.png")` registriert Bilder, packt sie in einen Atlas (inkl. `@2x`) und schreibt die Regel auf `background-image`/`image-set`/`background-position`/`width`/`height` um.
22
+ - **Cursor & Preload** — `-µ: Cursor("zoom")` erzeugt `cursor: url(...) x y, fallback` (mit `image-set` bei vorhandener `@2x`-Quelle); Cursor-Bilder können automatisch in eine Preload-Regel gesammelt werden.
23
+ - **Farb-API** — `Lighten`, `Alpha`, `MixColors`, `ParseColor`, `FormatColor` (Modelle `hsl` und `oklch`).
24
+ - **PSD-Bilderzeugung** — Button-/Icon-Serien, App-Icons und Animations-Strips aus geschichteten Entwürfen (über `gulp-mu-ps`), direkt an den CSS-Build gekoppelt.
25
+ - **Skin-Manifest & inkrementeller Build** — ein Manifest pro Skin, mtime-basierter Cache (Atlas und PSD-Schritte werden nur bei Änderungen neu erzeugt).
26
+
27
+ Die Quell-Stylesheets bleiben dabei **syntaktisch valides CSS** — Editoren, Linter und Diffs funktionieren unverändert. Intern ist µCSS eine PostCSS-Pipeline, das PostCSS-Ökosystem (cssnano, Stylelint, …) bleibt andockbar.
28
+
29
+ ## Quell-Stylesheets (`*.µ.css`)
30
+
31
+ Quell-Stylesheets verwenden das Doppelsuffix `*.µ.css` (ASCII-Alternative `*.mu.css`), damit Editoren sie automatisch als CSS erkennen. Für den Compiler ist die Endung irrelevant — das Manifest referenziert die Quellen explizit.
32
+
33
+ ```css
34
+ a:link {
35
+ color: µ($.linkColor);
36
+ border-bottom: 1px dashed µ(Lighten($.selectBaseBrgdColor, 0.7));
37
+ }
38
+ div.companylogo {
39
+ -µ: Sprite("imgs/logos/dosing_logo.png");
40
+ }
41
+ *.cursor_zoom {
42
+ -µ: Cursor("zoom");
43
+ }
44
+ ```
45
+
46
+ Eigene Makro-Helper werden als `function` (keine Arrow-Function) deklariert und mit `this` = Auswertungs-Scope aufgerufen:
47
+
48
+ ```js
49
+ // helpers.mjs — im Manifest unter helpers: { Borders } registrieren
50
+ export function Borders(_baseColor, _pixelWidth, _topLighten, _rightLighten, _bottomLighten, _leftLighten) {
51
+ this.AddProperty("border-top", `${_pixelWidth}px solid ${Lighten(_baseColor, _topLighten)}`);
52
+ this.AddProperty("border-right", `${_pixelWidth}px solid ${Lighten(_baseColor, _rightLighten)}`);
53
+ this.AddProperty("border-bottom", `${_pixelWidth}px solid ${Lighten(_baseColor, _bottomLighten)}`);
54
+ this.AddProperty("border-left", `${_pixelWidth}px solid ${Lighten(_baseColor, _leftLighten)}`);
55
+ }
56
+ ```
57
+
58
+ ```css
59
+ div.menu {
60
+ -µ: Borders($.menuBaseBrgdColor, 1, 0.3, -0.3, -0.3, 0.3);
61
+ }
62
+ ```
63
+
64
+ ## Schnellstart über das Skin-Manifest (empfohlen)
65
+
66
+ Pro Skin ein Manifest `skins/src/<skinname>.µcss.mjs` (ASCII-Alternative `.mucss.mjs`); der Skin-Name ergibt sich aus dem Teil vor dem Doppelsuffix.
67
+
68
+ ```js
69
+ // skins/src/std.µcss.mjs
70
+ import { DefineSkin } from "gulp-mu-css";
71
+
72
+ export default DefineSkin({
73
+ vars: { linkColor: "#aabbcc", selectBaseBrgdColor: "#007570" },
74
+ cursors: [{ name: "zoom", fallback: "zoom-in", image: "imgs/cursors/zoom.png", hotspot: [10, 8] }],
75
+ media: [
76
+ { buttonsAndIcons: "dev/media/final/panelbuttons.psd", layout: "std", outputDir: "imgs/panelbuttons" },
77
+ { copyFolder: "dev/media/final/fonts", to: "fonts" }
78
+ ],
79
+ sprites: { file: "imgs/sprites.png", retina: true },
80
+ files: [{ source: "src.µ.css", target: "std.css" }]
81
+ });
82
+ ```
83
+
84
+ ```js
85
+ // gulpfile.mjs des Projekts
86
+ import gulp from "gulp";
87
+ import { BuildSkin } from "gulp-mu-css";
88
+
89
+ export async function SkinStd() {
90
+ await BuildSkin("skins/src/std.µcss.mjs"); // inkrementell, Cache in skins/std/.cache/
91
+ }
92
+ export function SkinWatch() {
93
+ gulp.watch(["skins/src/**", "dev/media/final/**"], SkinStd);
94
+ }
95
+ ```
96
+
97
+ `BuildSkin(manifestPfad, { force?, outputDir?, rootDir? })` führt zuerst die `media`-Steps aus (`buttonsAndIcons`, `appIcons`, `sequenceStrip`, `copy`, `copyFolder`), kompiliert dann alle `files`-Einträge, löst den Sprite-Atlas auf und schreibt alles nach `skins/<skinname>/`. Der globale Schalter `imageFormat: "webp"` stellt Atlas und bilderzeugende Steps auf WebP um. Details und alle Optionen stehen im Handbuch (`docs/microCSS.pdf`).
98
+
99
+ ## Programmatische Nutzung
100
+
101
+ ```js
102
+ import { CompileMcss, SpriteManager, CursorManager } from "gulp-mu-css";
103
+
104
+ const sprites = new SpriteManager({ baseDir: "skins/std", atlasFile: "imgs/sprites.png", retina: true });
105
+ const cursors = new CursorManager([
106
+ { name: "zoom", fallback: "zoom-in", image: "imgs/general/gui/cursors/zoom.png", hotspot: [10, 8] }
107
+ ], { baseDir: "skins/std" });
108
+
109
+ const document = CompileMcss(source, {
110
+ vars: { linkColor: "#aabbcc", selectBaseBrgdColor: "#007570" },
111
+ sprites,
112
+ cursors
113
+ });
114
+ await sprites.Resolve(document); // packt den Atlas und schreibt die Sprite-Regeln um
115
+ await document.ToFile("skins/std/std.css");
116
+ ```
117
+
118
+ Wichtigste Exporte: `CompileMcss`, `CssDocument`/`CssRule` (PostCSS-AST-Wrapper mit `FindRule`, `AddRule`, `AddProperty`/`ChangeProperty`/`RemoveProperty`, `ToCss`/`ToFile`/`ToJson`/`FromJson`), die Farb-API (`Lighten`, `Alpha`, `MixColors`, …), `SpriteManager`, `CursorManager`, `PreloadRegistry`, `DefineSkin`/`BuildSkin`.
119
+
120
+ ## Fehlerdiagnostik
121
+
122
+ Build-Fehler nennen immer den Verursacher samt Quellbezug:
123
+
124
+ - **Inline-JavaScript**: Fehler werden als PostCSS-Fehler mit Datei, Zeile, Spalte und Quelltext-Ausschnitt gemeldet; der fehlschlagende Ausdruck wird genannt. JS-Syntaxfehler erscheinen als `invalid JavaScript expression "..."`.
125
+ - **Fehlende Sprite-Bilder**: vor dem Packen geprüft; *alle* fehlenden Dateien werden gesammelt gemeldet — mit URL, aufgelöstem Pfad und referenzierender Regel.
126
+ - **`media`-Steps in `BuildSkin`**: Fehler nennen Step-Nummer und -Typ; fehlende Quellen melden den aufgelösten Pfad statt eines rohen `ENOENT`.
127
+ - **Fehlende Cursor-Bilder**: nur eine Warnung (einmal pro Cursor), da die CSS über den Fallback funktionsfähig bleibt.
128
+
129
+ ## Handbuch
130
+
131
+ Das vollständige Benutzerhandbuch liegt als **`docs/microCSS.pdf`** bei (Markdown-Quelle: `docs/manual/microCSS-Handbuch.md`). Es behandelt Grundideen, alle Direktiven und Manifest-Optionen, die Bilderzeugung (inkl. `mode: "topLayerSets"` und `outputBase`), den inkrementellen Build sowie die Migration von µCSS 1.
132
+
133
+ ## Lizenz
134
+
135
+ MIT
Binary file
Binary file
Binary file