@absolu/assets-toolkit 1.3.1 → 1.4.1
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 +4 -0
- package/dist/plugins/iconfont/BuildFont.d.ts +7 -1
- package/dist/plugins/iconfont/BuildFont.d.ts.map +1 -1
- package/dist/plugins/iconfont/BuildFont.js +22 -7
- package/dist/plugins/iconfont/BuildFont.js.map +1 -1
- package/dist/plugins/iconfont/Cache.d.ts +0 -2
- package/dist/plugins/iconfont/Cache.d.ts.map +1 -1
- package/dist/plugins/iconfont/Cache.js +3 -7
- package/dist/plugins/iconfont/Cache.js.map +1 -1
- package/dist/plugins/iconfont/VitePluginIconfont.d.ts.map +1 -1
- package/dist/plugins/iconfont/VitePluginIconfont.js +5 -9
- package/dist/plugins/iconfont/VitePluginIconfont.js.map +1 -1
- package/dist/plugins/iconfont/templates/iconfonts.njk +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -118,6 +118,7 @@ export default createViteConfig({
|
|
|
118
118
|
iconClassName: 'icon',
|
|
119
119
|
fontPath: '@/iconfonts/',
|
|
120
120
|
iconDisplay: 'block',
|
|
121
|
+
fontDisplay: 'block',
|
|
121
122
|
},
|
|
122
123
|
svgstore: {
|
|
123
124
|
srcDir: 'src/images/icons-sprite',
|
|
@@ -143,6 +144,8 @@ export default createViteConfig({
|
|
|
143
144
|
|
|
144
145
|
Plugin Vite qui convertit des icônes SVG en font (SVG → TTF → WOFF/WOFF2) et génère les fichiers SCSS correspondants via des templates Nunjucks. Inclut un cache basé sur le hash des fichiers sources pour éviter les rebuilds inutiles.
|
|
145
146
|
|
|
147
|
+
Les glyphes reçoivent leur point de code dans l'ordre alphabétique des chemins des SVG. Les URL de la font portent un paramètre de cache busting (`?v=…`) dérivé du contenu des fichiers WOFF/WOFF2 : il ne change que si les glyphes changent, et reste identique d'un poste à l'autre, avec ou sans dossier `.cache/`.
|
|
148
|
+
|
|
146
149
|
| Option | Type | Défaut | Description |
|
|
147
150
|
|---|---|---|---|
|
|
148
151
|
| `svgs` | `string` | `src/images/icons/**/*.svg` | Glob pattern des fichiers SVG sources |
|
|
@@ -151,6 +154,7 @@ Plugin Vite qui convertit des icônes SVG en font (SVG → TTF → WOFF/WOFF2) e
|
|
|
151
154
|
| `iconClassName` | `string` | `icon` | Nom de la classe CSS de base |
|
|
152
155
|
| `fontPath` | `string` | `@/iconfonts/` | Chemin relatif vers la font dans le CSS |
|
|
153
156
|
| `iconDisplay` | `string` | `block` | Valeur de `display` du placeholder `%icon-base-styles` (`inline-block` pour retrouver le comportement des anciens thèmes Gulp) |
|
|
157
|
+
| `fontDisplay` | `string` | `block` | Valeur de `font-display` de la font d'icônes (`swap` pour l'audit Lighthouse « Le texte reste visible pendant le chargement des polices ») |
|
|
154
158
|
|
|
155
159
|
### `VitePluginSvgstore(options)`
|
|
156
160
|
|
|
@@ -5,12 +5,18 @@ interface BuildFontOptions {
|
|
|
5
5
|
iconClassName?: string;
|
|
6
6
|
fontPath?: string;
|
|
7
7
|
iconDisplay?: string;
|
|
8
|
+
fontDisplay?: string;
|
|
8
9
|
[key: string]: any;
|
|
9
10
|
}
|
|
10
11
|
interface BuildConfig {
|
|
11
12
|
buildFont?: boolean;
|
|
12
|
-
cssCacheToken?: number | null;
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Liste triée des SVG sources : l'ordre fixe le point de code de chaque glyphe,
|
|
16
|
+
* et `glob` renvoie les fichiers dans l'ordre du système de fichiers, qui varie
|
|
17
|
+
* d'un poste à l'autre.
|
|
18
|
+
*/
|
|
19
|
+
export declare function globSvgs(pattern: string): string[];
|
|
14
20
|
export declare class BuildFont {
|
|
15
21
|
private options;
|
|
16
22
|
constructor(options: BuildFontOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildFont.d.ts","sourceRoot":"","sources":["../../../src/plugins/iconfont/BuildFont.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BuildFont.d.ts","sourceRoot":"","sources":["../../../src/plugins/iconfont/BuildFont.ts"],"names":[],"mappings":"AAiBA,UAAU,gBAAgB;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,UAAU,WAAW;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAWD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAI/B,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CA4EnD"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { createHash } from "crypto";
|
|
1
2
|
import { resolve, dirname } from "path";
|
|
2
3
|
import { fileURLToPath } from "url";
|
|
3
4
|
import { globSync } from "glob";
|
|
4
|
-
import { createReadStream, createWriteStream, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
5
|
+
import { createReadStream, createWriteStream, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
5
6
|
import { writeFile } from "fs/promises";
|
|
6
7
|
import SVGIcons2SVGFontStream from "svgicons2svgfont";
|
|
7
8
|
import svg2ttf from "svg2ttf";
|
|
@@ -11,6 +12,14 @@ import nunjucks from "nunjucks";
|
|
|
11
12
|
import { log } from "./Logger.js";
|
|
12
13
|
const __filename = fileURLToPath(import.meta.url);
|
|
13
14
|
const __dirname = dirname(__filename);
|
|
15
|
+
/**
|
|
16
|
+
* Liste triée des SVG sources : l'ordre fixe le point de code de chaque glyphe,
|
|
17
|
+
* et `glob` renvoie les fichiers dans l'ordre du système de fichiers, qui varie
|
|
18
|
+
* d'un poste à l'autre.
|
|
19
|
+
*/
|
|
20
|
+
export function globSvgs(pattern) {
|
|
21
|
+
return globSync(pattern).sort();
|
|
22
|
+
}
|
|
14
23
|
export class BuildFont {
|
|
15
24
|
options;
|
|
16
25
|
constructor(options) {
|
|
@@ -19,7 +28,6 @@ export class BuildFont {
|
|
|
19
28
|
async build(config) {
|
|
20
29
|
const processConfig = {
|
|
21
30
|
buildFont: true,
|
|
22
|
-
cssCacheToken: null,
|
|
23
31
|
...config
|
|
24
32
|
};
|
|
25
33
|
return await new Promise((resolvePromise) => {
|
|
@@ -31,17 +39,23 @@ export class BuildFont {
|
|
|
31
39
|
fontHeight: 1000
|
|
32
40
|
});
|
|
33
41
|
const fontSvgPath = resolve(`src/iconfonts/${this.options.fontName}.svg`);
|
|
42
|
+
const fontFiles = ['woff2', 'woff'].map(ext => resolve(`src/iconfonts/${this.options.fontName}.${ext}`));
|
|
34
43
|
fontStream.pipe(createWriteStream(fontSvgPath))
|
|
35
44
|
.on('finish', async () => {
|
|
36
|
-
|
|
45
|
+
// Le cache peut être à jour alors que les fonts ont été supprimées.
|
|
46
|
+
if (processConfig.buildFont || !fontFiles.every(file => existsSync(file))) {
|
|
37
47
|
log("Construction de la font d'icônes");
|
|
38
48
|
const content = readFileSync(fontSvgPath);
|
|
39
49
|
const ttf = svg2ttf(content.toString(), {
|
|
40
50
|
ts: 0,
|
|
41
51
|
});
|
|
42
|
-
await writeFile(
|
|
43
|
-
await writeFile(
|
|
52
|
+
await writeFile(fontFiles[0], ttf2woff2(Buffer.from(ttf.buffer)));
|
|
53
|
+
await writeFile(fontFiles[1], ttf2woff(Buffer.from(ttf.buffer)));
|
|
44
54
|
}
|
|
55
|
+
// Cache busting dérivé du contenu des fonts : il ne change que
|
|
56
|
+
// si les glyphes changent, et il est identique sur tous les postes.
|
|
57
|
+
const cacheToken = createHash('sha256');
|
|
58
|
+
fontFiles.forEach(file => cacheToken.update(readFileSync(file)));
|
|
45
59
|
const templatesDir = resolve(__dirname, 'templates');
|
|
46
60
|
const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatesDir));
|
|
47
61
|
const css = env.render('iconfonts.njk', {
|
|
@@ -49,7 +63,8 @@ export class BuildFont {
|
|
|
49
63
|
fontName: this.options.fontName,
|
|
50
64
|
fontPath: this.options.fontPath ?? '@/iconfonts/',
|
|
51
65
|
className: this.options.iconClassName ?? 'icon',
|
|
52
|
-
cacheToken:
|
|
66
|
+
cacheToken: cacheToken.digest('hex').slice(0, 12),
|
|
67
|
+
fontDisplay: this.options.fontDisplay ?? 'block',
|
|
53
68
|
});
|
|
54
69
|
const cssVars = env.render('iconfonts-vars.njk', {
|
|
55
70
|
glyphs: glyphsData,
|
|
@@ -62,7 +77,7 @@ export class BuildFont {
|
|
|
62
77
|
writeFileSync(resolve(`${scssDir}/_iconfonts-vars.scss`), cssVars);
|
|
63
78
|
resolvePromise();
|
|
64
79
|
});
|
|
65
|
-
const files =
|
|
80
|
+
const files = globSvgs(this.options.svgs ?? 'src/images/icons/**/*.svg');
|
|
66
81
|
files.forEach(file => {
|
|
67
82
|
const unicodeCounter2 = unicodeCounter++;
|
|
68
83
|
const unicodeChar = String.fromCharCode(unicodeCounter2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildFont.js","sourceRoot":"","sources":["../../../src/plugins/iconfont/BuildFont.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AACtC,OAAO,EAAC,aAAa,EAAC,MAAM,KAAK,CAAC;AAClC,OAAO,EAAC,QAAQ,EAAC,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAa,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"BuildFont.js","sourceRoot":"","sources":["../../../src/plugins/iconfont/BuildFont.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
interface CacheData {
|
|
2
2
|
hash?: string;
|
|
3
|
-
cssCacheToken?: number;
|
|
4
3
|
}
|
|
5
4
|
export declare class Cache {
|
|
6
5
|
private currentHash;
|
|
@@ -9,7 +8,6 @@ export declare class Cache {
|
|
|
9
8
|
constructor(logger: any);
|
|
10
9
|
getCacheData(): CacheData;
|
|
11
10
|
getPreviousHash(): string | null;
|
|
12
|
-
getPreviousCssCacheToken(): number | null;
|
|
13
11
|
setCurrentHash(hash: string): void;
|
|
14
12
|
getFileHash(filePath: string): string;
|
|
15
13
|
getFilesHash(files: string[]): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/plugins/iconfont/Cache.ts"],"names":[],"mappings":"AAKA,UAAU,SAAS;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/plugins/iconfont/Cache.ts"],"names":[],"mappings":"AAKA,UAAU,SAAS;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,KAAK;IACd,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,GAAG;IAMvB,YAAY,IAAI,SAAS;IAUzB,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIlC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMrC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IASrC,cAAc,IAAI,IAAI;CAMzB"}
|
|
@@ -24,9 +24,6 @@ export class Cache {
|
|
|
24
24
|
getPreviousHash() {
|
|
25
25
|
return this.getCacheData()?.hash || null;
|
|
26
26
|
}
|
|
27
|
-
getPreviousCssCacheToken() {
|
|
28
|
-
return this.getCacheData()?.cssCacheToken || null;
|
|
29
|
-
}
|
|
30
27
|
setCurrentHash(hash) {
|
|
31
28
|
this.currentHash = hash;
|
|
32
29
|
}
|
|
@@ -38,16 +35,15 @@ export class Cache {
|
|
|
38
35
|
getFilesHash(files) {
|
|
39
36
|
let currentHash = '';
|
|
40
37
|
files.forEach(file => {
|
|
41
|
-
|
|
42
|
-
currentHash +=
|
|
38
|
+
// Le chemin donne le nom du glyphe : un renommage doit invalider le cache.
|
|
39
|
+
currentHash += file + this.getFileHash(file);
|
|
43
40
|
});
|
|
44
41
|
return currentHash;
|
|
45
42
|
}
|
|
46
43
|
writeCacheFile() {
|
|
47
44
|
const cacheDir = dirname(this.cacheFile);
|
|
48
|
-
const cssCacheToken = Date.now();
|
|
49
45
|
mkdirSync(cacheDir, { recursive: true });
|
|
50
|
-
writeFileSync(this.cacheFile, JSON.stringify({ hash: this.currentHash
|
|
46
|
+
writeFileSync(this.cacheFile, JSON.stringify({ hash: this.currentHash }), 'utf-8');
|
|
51
47
|
log('Mise à jour du fichier de cache');
|
|
52
48
|
}
|
|
53
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/plugins/iconfont/Cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/plugins/iconfont/Cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAC,SAAS,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAC,OAAO,EAAE,OAAO,EAAC,MAAM,MAAM,CAAC;AACtC,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAMhC,MAAM,OAAO,KAAK;IACN,WAAW,CAAS;IACpB,MAAM,CAAM;IACZ,SAAS,CAAS;IAE1B,YAAY,MAAW;QACnB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IACpF,CAAC;IAED,YAAY;QACR,IAAI,SAAS,GAAc,EAAE,CAAC;QAC9B,IAAI,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,GAAG,CAAC,+BAA+B,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,IAAY;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,QAAgB;QACxB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,YAAY,CAAC,KAAe;QACxB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,2EAA2E;YAC3E,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,cAAc;QACV,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACjF,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC3C,CAAC;CACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VitePluginIconfont.d.ts","sourceRoot":"","sources":["../../../src/plugins/iconfont/VitePluginIconfont.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VitePluginIconfont.d.ts","sourceRoot":"","sources":["../../../src/plugins/iconfont/VitePluginIconfont.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAiB,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM,CAuD/E"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BuildFont } from "./BuildFont.js";
|
|
1
|
+
import { BuildFont, globSvgs } from "./BuildFont.js";
|
|
3
2
|
import { Cache } from "./Cache.js";
|
|
4
3
|
import { log } from "./Logger.js";
|
|
5
4
|
export default function VitePluginIconfont(userOptions) {
|
|
@@ -9,7 +8,7 @@ export default function VitePluginIconfont(userOptions) {
|
|
|
9
8
|
...userOptions
|
|
10
9
|
};
|
|
11
10
|
const builder = new BuildFont(options);
|
|
12
|
-
let files =
|
|
11
|
+
let files = globSvgs(options.svgs);
|
|
13
12
|
let cacheService = null;
|
|
14
13
|
return {
|
|
15
14
|
name: 'assets-toolkit-iconfont',
|
|
@@ -19,14 +18,14 @@ export default function VitePluginIconfont(userOptions) {
|
|
|
19
18
|
configureServer(server) {
|
|
20
19
|
const watcher = server.watcher;
|
|
21
20
|
watcher.on('change', async (path) => {
|
|
22
|
-
files =
|
|
21
|
+
files = globSvgs(options.svgs);
|
|
23
22
|
const match = files.find(svg => path.endsWith(svg));
|
|
24
23
|
if (match) {
|
|
25
24
|
await builder.build();
|
|
26
25
|
}
|
|
27
26
|
});
|
|
28
27
|
watcher.on('add', async (path) => {
|
|
29
|
-
files =
|
|
28
|
+
files = globSvgs(options.svgs);
|
|
30
29
|
const match = files.find(svg => path.endsWith(svg));
|
|
31
30
|
if (match) {
|
|
32
31
|
await builder.build();
|
|
@@ -52,10 +51,7 @@ export default function VitePluginIconfont(userOptions) {
|
|
|
52
51
|
else {
|
|
53
52
|
cacheService.writeCacheFile();
|
|
54
53
|
}
|
|
55
|
-
return await builder.build({
|
|
56
|
-
cssCacheToken: cacheService.getPreviousCssCacheToken(),
|
|
57
|
-
buildFont
|
|
58
|
-
});
|
|
54
|
+
return await builder.build({ buildFont });
|
|
59
55
|
}
|
|
60
56
|
};
|
|
61
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VitePluginIconfont.js","sourceRoot":"","sources":["../../../src/plugins/iconfont/VitePluginIconfont.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"VitePluginIconfont.js","sourceRoot":"","sources":["../../../src/plugins/iconfont/VitePluginIconfont.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAC;AAIhC,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,WAA4B;IACnE,MAAM,OAAO,GAAG;QACZ,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,2BAA2B;QACjC,GAAG,WAAW;KACjB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,YAAY,GAAiB,IAAI,CAAC;IAEtC,OAAO;QACH,IAAI,EAAE,yBAAyB;QAC/B,cAAc,CAAC,MAAsB;YACjC,YAAY,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,eAAe,CAAC,MAAM;YAClB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;gBACxC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,IAAG,KAAK,EAAE,CAAC;oBACP,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;gBACrC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,IAAG,KAAK,EAAE,CAAC;oBACP,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,IAAG,KAAK,EAAE,CAAC;oBACP,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QACD,KAAK,CAAC,UAAU;YACZ,IAAI,CAAC,YAAY;gBAAE,OAAO;YAE1B,IAAI,SAAS,GAAG,IAAI,CAAC;YACrB,MAAM,WAAW,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrD,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAEzC,IAAG,YAAY,CAAC,eAAe,EAAE,KAAK,WAAW,EAAE,CAAC;gBAChD,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBACpC,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACJ,YAAY,CAAC,cAAc,EAAE,CAAC;YAClC,CAAC;YACD,OAAO,MAAM,OAAO,CAAC,KAAK,CAAC,EAAC,SAAS,EAAC,CAAC,CAAC;QAC5C,CAAC;KACJ,CAAC;AACN,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface IconfontOptions {
|
|
|
18
18
|
fontPath?: string;
|
|
19
19
|
/** Valeur de `display` du placeholder `%icon-base-styles` (défaut : `block`) */
|
|
20
20
|
iconDisplay?: string;
|
|
21
|
+
/** Valeur de `font-display` de la font d'icônes (défaut : `block`) */
|
|
22
|
+
fontDisplay?: string;
|
|
21
23
|
}
|
|
22
24
|
export interface SvgstoreOptions {
|
|
23
25
|
/** Dossier source des SVG du sprite */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,WAAW;IACxB,0DAA0D;IAC1D,MAAM,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,aAAa,CAAC;KACzB,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC5B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IAEb,uGAAuG;IACvG,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAEnC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAEnC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,8GAA8G;IAC9G,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE9B,wDAAwD;IACxD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAElD,mCAAmC;IACnC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,WAAW;IACxB,0DAA0D;IAC1D,MAAM,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,aAAa,CAAC;KACzB,CAAC;CACL;AAED,MAAM,WAAW,eAAe;IAC5B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACpC,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IAEb,uGAAuG;IACvG,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAEnC,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,CAAC;IAEnC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,8GAA8G;IAC9G,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAE9B,wDAAwD;IACxD,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAElD,mCAAmC;IACnC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;CACnB"}
|
package/package.json
CHANGED