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 +135 -0
- package/docs/manual/imgs/bc_alu.png +0 -0
- package/docs/manual/imgs/bc_aqua.png +0 -0
- package/docs/manual/imgs/logo.png +0 -0
- package/docs/manual/imgs/strip_result_smoke.png +0 -0
- package/docs/manual/microCSS-Handbuch.md +774 -0
- package/docs/microCSS.pdf +0 -0
- package/package.json +31 -0
- package/src/api/Colors.mjs +260 -0
- package/src/api/Cursors.mjs +90 -0
- package/src/api/Preload.mjs +35 -0
- package/src/api/Sprites.mjs +171 -0
- package/src/build/BuildCache.mjs +81 -0
- package/src/build/MediaSteps.mjs +171 -0
- package/src/build/SkinBuilder.mjs +197 -0
- package/src/compile/Compiler.mjs +168 -0
- package/src/css/CssDocument.mjs +244 -0
- package/src/eval/MuContext.mjs +62 -0
- package/src/index.mjs +13 -0
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
|
|
Binary file
|