@dubium/icons 0.0.2-alpha.5 → 0.0.2-alpha.7
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/dist/collection/index.d.ts +1 -8
- package/dist/collection/index.js +3075 -3082
- package/dist/vite/plugin/index.d.ts +4 -4
- package/dist/vite/plugin/plugin.d.ts +16 -17
- package/dist/vite/plugin/plugin.js +68 -44
- package/dist/vite/plugin/plugin.types.d.ts +71 -2
- package/dist/vite/plugin/virtual/virtual.module.d.ts +17 -3
- package/dist/vite/plugin/virtual/virtual.module.js +19 -11
- package/dist/vite/runtime/index.js +2 -0
- package/package.json +5 -1
- package/dist/collection/GosuslugiIcon.d.ts +0 -8
- package/dist/collection/GosuslugiIcon.js +0 -48
- package/dist/collection/InfoCircleDoubleFilledIcon.d.ts +0 -6
- package/dist/collection/InfoCircleDoubleFilledIcon.js +0 -23
- package/dist/collection/OkFilledIcon.d.ts +0 -6
- package/dist/collection/OkFilledIcon.js +0 -15
- package/dist/collection/SogazFilledIcon.d.ts +0 -6
- package/dist/collection/SogazFilledIcon.js +0 -15
- package/dist/collection/SogazLongFilledIcon.d.ts +0 -6
- package/dist/collection/SogazLongFilledIcon.js +0 -15
- package/dist/collection/TgFilledIcon.d.ts +0 -6
- package/dist/collection/TgFilledIcon.js +0 -15
- package/dist/collection/VkFilledIcon.d.ts +0 -6
- package/dist/collection/VkFilledIcon.js +0 -15
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Публичный API Vite-плагина {@link dubiumIcons}.
|
|
3
3
|
*
|
|
4
4
|
* @remarks
|
|
5
|
-
* Плагин сканирует исходники приложения, строит
|
|
6
|
-
* `virtual:@dubium/icons-registry`
|
|
7
|
-
*
|
|
5
|
+
* Плагин сканирует исходники приложения, строит virtual registry
|
|
6
|
+
* `virtual:@dubium/icons-registry` и при необходимости автоматически
|
|
7
|
+
* публикует scanner-detected loaders в runtime registry для MF.
|
|
8
8
|
*/
|
|
9
9
|
export { dubiumIcons } from "./plugin.js";
|
|
10
10
|
export { dubiumIcons as default } from "./plugin.js";
|
|
11
|
-
export type { DubiumIconsPluginOptions, TDubiumIconSource } from "./plugin.types.js";
|
|
11
|
+
export type { DubiumIconsPluginOptions, TDubiumIconIncludeName, TDubiumIconSource } from "./plugin.types.js";
|
|
@@ -5,23 +5,16 @@ import type { DubiumIconsPluginOptions } from "./plugin.types.js";
|
|
|
5
5
|
*
|
|
6
6
|
* @remarks
|
|
7
7
|
* Плагин сканирует исходники проекта, находит статические использования
|
|
8
|
-
* Vite-компонента `Icon`
|
|
8
|
+
* Vite-компонента `Icon` и строковые конфигурации, после чего генерирует
|
|
9
9
|
* виртуальный модуль `virtual:@dubium/icons-registry` с ленивыми загрузчиками
|
|
10
10
|
* только для используемых иконок.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
* импортировано из `@dubium/icons/vite`. Набор имён можно переопределить через
|
|
14
|
-
* `options.componentNames`, а список свойств, значения которых трактуются как имена
|
|
15
|
-
* иконок, — через `options.propertyNames`. Теги прочих компонентов, например
|
|
16
|
-
* `<IconButton>`, игнорируются.
|
|
12
|
+
* Дополнительно:
|
|
17
13
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* имени в `importPattern`; локальные каталоги SVG-файлов подключаются через
|
|
21
|
-
* `options.sources`.
|
|
14
|
+
* - `include` позволяет явно добавить динамические имена в compile-time registry;
|
|
15
|
+
* - `runtimeRegistry` публикует итоговый compile-time registry в общий runtime registry.
|
|
22
16
|
*
|
|
23
|
-
*
|
|
24
|
-
* на этапе сборки — о них выводится предупреждение с указанием файлов.
|
|
17
|
+
* При `runtimeRegistry` поле `iconName` сканируется автоматически.
|
|
25
18
|
*
|
|
26
19
|
* @param options - Опции плагина
|
|
27
20
|
* @returns Объект плагина Vite
|
|
@@ -29,12 +22,18 @@ import type { DubiumIconsPluginOptions } from "./plugin.types.js";
|
|
|
29
22
|
* @example
|
|
30
23
|
*
|
|
31
24
|
* ```ts
|
|
32
|
-
* //
|
|
33
|
-
*
|
|
34
|
-
*
|
|
25
|
+
* // Host: динамические имена заранее известны Host.
|
|
26
|
+
* dubiumIcons({
|
|
27
|
+
* include: ["AiOutline", "AlertCircleOutline"],
|
|
28
|
+
* })
|
|
29
|
+
* ```
|
|
35
30
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
31
|
+
* @example
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* // Remote: имена автоматически публикуются в runtime registry.
|
|
35
|
+
* dubiumIcons({
|
|
36
|
+
* runtimeRegistry: "profile-mf",
|
|
38
37
|
* })
|
|
39
38
|
* ```
|
|
40
39
|
*/
|
|
@@ -2,86 +2,105 @@ import { scanSource as e } from "./scanner/scanner.source.js";
|
|
|
2
2
|
import { DEFAULT_EXTENSIONS as t, getSourceFiles as n, isPathInsideDirectory as r, normalizePath as i } from "./sources/sources.files.js";
|
|
3
3
|
import { buildLocalCatalog as a } from "./sources/sources.catalog.js";
|
|
4
4
|
import { validateSources as o } from "./sources/sources.validate.js";
|
|
5
|
-
import { RESOLVED_VIRTUAL_MODULE_ID as s } from "./virtual/virtual.constants.js";
|
|
6
|
-
import { createVirtualModuleSource as
|
|
7
|
-
import { readFile as
|
|
8
|
-
import { extname as
|
|
5
|
+
import { RESOLVED_VIRTUAL_MODULE_ID as s, VIRTUAL_MODULE_ID as c } from "./virtual/virtual.constants.js";
|
|
6
|
+
import { createVirtualModuleSource as l } from "./virtual/virtual.module.js";
|
|
7
|
+
import { readFile as u } from "node:fs/promises";
|
|
8
|
+
import { extname as d, relative as f, resolve as p } from "node:path";
|
|
9
9
|
//#region src/icons/vite/plugin/plugin.ts
|
|
10
|
-
var
|
|
10
|
+
var m = ["iconName"], h = (e, t) => {
|
|
11
11
|
if (e.size !== t.size) return !1;
|
|
12
12
|
for (let n of e) if (!t.has(n)) return !1;
|
|
13
13
|
return !0;
|
|
14
|
-
},
|
|
15
|
-
let
|
|
14
|
+
}, g = (e) => {
|
|
15
|
+
let t = e.indexOf("?"), n = e.indexOf("#"), r = e.length;
|
|
16
|
+
return t !== -1 && (r = Math.min(r, t)), n !== -1 && (r = Math.min(r, n)), e.slice(0, r);
|
|
17
|
+
}, _ = (_ = {}) => {
|
|
18
|
+
let v = _.componentNames ? [..._.componentNames] : [], y = _.runtimeRegistry?.trim();
|
|
19
|
+
if (_.runtimeRegistry !== void 0 && !y) throw Error("[@dubium/icons] options.runtimeRegistry должен содержать непустой уникальный owner микрофронтенда.");
|
|
20
|
+
let b = [.../* @__PURE__ */ new Set([...y ? m : [], ..._.propertyNames ?? []])], x = [...new Set(_.include ?? [])];
|
|
21
|
+
for (let e of x) if (!e.trim() || e !== e.trim()) throw Error(`[@dubium/icons] Некорректное имя в options.include: ${JSON.stringify(e)}.\nИмя иконки должно быть непустой строкой без пробелов по краям.`);
|
|
22
|
+
let S = _.scan ? [..._.scan] : ["src"], C = _.sources ? [..._.sources] : [{
|
|
16
23
|
type: "package",
|
|
17
24
|
importPattern: "@dubium/icons/icons/{name}"
|
|
18
25
|
}];
|
|
19
|
-
o(
|
|
20
|
-
let
|
|
26
|
+
o(C);
|
|
27
|
+
let w = C.filter((e) => e.type === "local"), T = C.find((e) => e.type === "package"), E = /* @__PURE__ */ new Map(), D = /* @__PURE__ */ new Map(), O = [], k = process.cwd(), A, j = "", M = () => {
|
|
21
28
|
let e = /* @__PURE__ */ new Set();
|
|
22
|
-
for (let t of
|
|
29
|
+
for (let t of E.values()) for (let n of t) e.add(n);
|
|
23
30
|
return [...e].sort((e, t) => e.localeCompare(t));
|
|
24
|
-
},
|
|
31
|
+
}, N = () => {
|
|
32
|
+
let e = new Set(M());
|
|
33
|
+
for (let t of x) e.add(t);
|
|
34
|
+
return [...e].sort((e, t) => e.localeCompare(t));
|
|
35
|
+
}, P = async (n, r) => {
|
|
25
36
|
let a = i(n);
|
|
26
|
-
if (!t.has(
|
|
27
|
-
let e =
|
|
37
|
+
if (!t.has(d(n).toLowerCase())) {
|
|
38
|
+
let e = E.delete(a), t = D.delete(a);
|
|
28
39
|
return e || t;
|
|
29
40
|
}
|
|
30
41
|
let o;
|
|
31
42
|
try {
|
|
32
|
-
o = r ? await r() : await
|
|
43
|
+
o = r ? await r() : await u(n, "utf8");
|
|
33
44
|
} catch {
|
|
34
|
-
let e =
|
|
45
|
+
let e = E.delete(a), t = D.delete(a);
|
|
35
46
|
return e || t;
|
|
36
47
|
}
|
|
37
|
-
let s =
|
|
38
|
-
return
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
for (let t of
|
|
42
|
-
let r =
|
|
48
|
+
let s = E.get(a) ?? /* @__PURE__ */ new Set(), c = D.get(a) ?? 0, l = e(o, v, b);
|
|
49
|
+
return E.set(a, l.icons), l.dynamicNames > 0 ? D.set(a, l.dynamicNames) : D.delete(a), !h(s, l.icons) || c !== l.dynamicNames;
|
|
50
|
+
}, F = async (e) => {
|
|
51
|
+
E.clear(), D.clear();
|
|
52
|
+
for (let t of S) {
|
|
53
|
+
let r = p(k, t), i;
|
|
43
54
|
try {
|
|
44
55
|
i = await n(r);
|
|
45
56
|
} catch {
|
|
46
57
|
e?.warn(`[@dubium/icons] Директория для сканирования недоступна: "${t}".\nПроверьте options.scan, существование пути и права доступа.`);
|
|
47
58
|
continue;
|
|
48
59
|
}
|
|
49
|
-
for (let t of i) e?.addWatchFile(t), await
|
|
60
|
+
for (let t of i) e?.addWatchFile(t), await P(t);
|
|
50
61
|
}
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
},
|
|
54
|
-
if (!
|
|
55
|
-
let e =
|
|
56
|
-
e &&
|
|
57
|
-
},
|
|
58
|
-
if (
|
|
59
|
-
|
|
62
|
+
}, I = async () => {
|
|
63
|
+
O = await Promise.all(w.map((e) => a(k, e)));
|
|
64
|
+
}, L = (e) => w.some((t) => r(p(k, t.path), e)), R = (e) => S.some((t) => r(p(k, t), e)), z = () => {
|
|
65
|
+
if (!A) return;
|
|
66
|
+
let e = A.moduleGraph.getModuleById(s);
|
|
67
|
+
e && A.moduleGraph.invalidateModule(e), A.ws.send({ type: "full-reload" });
|
|
68
|
+
}, B = (e) => {
|
|
69
|
+
if (D.size === 0) {
|
|
70
|
+
j = "";
|
|
60
71
|
return;
|
|
61
72
|
}
|
|
62
|
-
let t = [...
|
|
63
|
-
t !==
|
|
73
|
+
let t = [...D.entries()].sort(([e], [t]) => e.localeCompare(t)).map(([e, t]) => ` - ${i(f(k, e))}: ${t}`).join("\n");
|
|
74
|
+
t !== j && (j = t, e(`[@dubium/icons] Найдены динамические <Icon name={...}>:\n${t}\n${y ? "runtimeRegistry публикует только имена, найденные scanner-ом или добавленные в options.include. Для EventBus используйте поле iconName: \"...\" или добавьте своё поле в options.propertyNames." : "Если возможные значения известны текущему приложению, добавьте их в options.include. Для MF Remote можно включить options.runtimeRegistry."}`));
|
|
64
75
|
};
|
|
65
76
|
return {
|
|
66
77
|
name: "dubium-icons",
|
|
67
78
|
enforce: "pre",
|
|
68
79
|
configResolved(e) {
|
|
69
|
-
|
|
80
|
+
k = e.root;
|
|
70
81
|
},
|
|
71
82
|
async buildStart() {
|
|
72
|
-
await
|
|
83
|
+
await I(), await F(this), B((e) => this.warn(e));
|
|
84
|
+
},
|
|
85
|
+
transform(e, n) {
|
|
86
|
+
if (!y || N().length === 0) return null;
|
|
87
|
+
let r = g(n);
|
|
88
|
+
return !R(r) || !t.has(d(r).toLowerCase()) || e.includes("virtual:@dubium/icons-registry") ? null : {
|
|
89
|
+
code: `import ${JSON.stringify(c)};\n${e}`,
|
|
90
|
+
map: null
|
|
91
|
+
};
|
|
73
92
|
},
|
|
74
93
|
configureServer(e) {
|
|
75
|
-
|
|
76
|
-
for (let t of
|
|
94
|
+
A = e;
|
|
95
|
+
for (let t of w) e.watcher.add(p(k, t.path));
|
|
77
96
|
let t = async (e) => {
|
|
78
|
-
let t =
|
|
79
|
-
|
|
80
|
-
|
|
97
|
+
let t = L(e), n = R(e) ? await P(e) : !1, r = () => {
|
|
98
|
+
z(), B((e) => {
|
|
99
|
+
A?.config.logger.warn(e);
|
|
81
100
|
});
|
|
82
101
|
};
|
|
83
102
|
if (t) {
|
|
84
|
-
await
|
|
103
|
+
await I(), r();
|
|
85
104
|
return;
|
|
86
105
|
}
|
|
87
106
|
n && r();
|
|
@@ -94,12 +113,17 @@ var p = (e, t) => {
|
|
|
94
113
|
return e === "virtual:@dubium/icons-registry" ? s : null;
|
|
95
114
|
},
|
|
96
115
|
load(e) {
|
|
97
|
-
|
|
116
|
+
if (e !== s) return null;
|
|
117
|
+
let t = N();
|
|
118
|
+
return l(t, O, T, (e) => this.resolve(e), y ? {
|
|
119
|
+
owner: y,
|
|
120
|
+
iconNames: t
|
|
121
|
+
} : void 0);
|
|
98
122
|
},
|
|
99
123
|
async handleHotUpdate(e) {
|
|
100
|
-
if (
|
|
124
|
+
if (R(e.file) && await P(e.file, e.read)) return z(), B((e) => this.warn(e)), [];
|
|
101
125
|
}
|
|
102
126
|
};
|
|
103
127
|
};
|
|
104
128
|
//#endregion
|
|
105
|
-
export {
|
|
129
|
+
export { _ as dubiumIcons };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TPackageIconName } from "../icon/Icon.types.js";
|
|
1
2
|
/**
|
|
2
3
|
* Источник, из которого разрешаются имена иконок.
|
|
3
4
|
*
|
|
@@ -10,7 +11,7 @@ export type TDubiumIconSource = {
|
|
|
10
11
|
* Локальный источник иконок.
|
|
11
12
|
*
|
|
12
13
|
* @example
|
|
13
|
-
* `
|
|
14
|
+
* `UserOutlineIcon.tsx` при suffix `Icon` даёт имя `UserOutline`.
|
|
14
15
|
*/
|
|
15
16
|
type: "local";
|
|
16
17
|
/**
|
|
@@ -40,6 +41,15 @@ export type TDubiumIconSource = {
|
|
|
40
41
|
*/
|
|
41
42
|
importPattern: string;
|
|
42
43
|
};
|
|
44
|
+
/**
|
|
45
|
+
* Имя иконки, которое можно явно добавить в compile-time registry.
|
|
46
|
+
*
|
|
47
|
+
* @remarks
|
|
48
|
+
* `TPackageIconName` даёт autocomplete встроенной коллекции.
|
|
49
|
+
* Дополнительная строковая часть оставляет возможность использовать
|
|
50
|
+
* пользовательские `local` sources.
|
|
51
|
+
*/
|
|
52
|
+
export type TDubiumIconIncludeName = TPackageIconName | (string & Record<never, never>);
|
|
43
53
|
/**
|
|
44
54
|
* Настройки Vite-плагина {@link dubiumIcons}.
|
|
45
55
|
*/
|
|
@@ -56,15 +66,74 @@ export interface DubiumIconsPluginOptions {
|
|
|
56
66
|
* @default []
|
|
57
67
|
*/
|
|
58
68
|
componentNames?: readonly string[];
|
|
69
|
+
/**
|
|
70
|
+
* Явный список иконок, которые нужно добавить в compile-time registry,
|
|
71
|
+
* даже если scanner не нашёл их в исходниках.
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* Используйте `include`, когда текущее приложение рендерит динамическое имя:
|
|
75
|
+
*
|
|
76
|
+
* ```tsx
|
|
77
|
+
* <Icon name={event.iconName} />
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* и возможные значения известны заранее.
|
|
81
|
+
*
|
|
82
|
+
* Для каждого имени создаётся отдельный lazy `import()`.
|
|
83
|
+
*
|
|
84
|
+
* @default []
|
|
85
|
+
*/
|
|
86
|
+
include?: readonly TDubiumIconIncludeName[];
|
|
59
87
|
/**
|
|
60
88
|
* Дополнительные строковые поля, которые считаются ссылками на иконки.
|
|
61
89
|
*
|
|
62
90
|
* @remarks
|
|
63
|
-
*
|
|
91
|
+
* Если включён `runtimeRegistry`, поле `iconName` сканируется автоматически.
|
|
92
|
+
* Здесь можно добавить собственные поля, например `notificationIcon`.
|
|
93
|
+
*
|
|
94
|
+
* Поле `name` можно указать вручную, но оно очень общее и может совпадать
|
|
95
|
+
* с другими объектами приложения.
|
|
64
96
|
*
|
|
65
97
|
* @default []
|
|
66
98
|
*/
|
|
67
99
|
propertyNames?: readonly string[];
|
|
100
|
+
/**
|
|
101
|
+
* Публикует compile-time registry текущего приложения/MF
|
|
102
|
+
* в общий runtime registry.
|
|
103
|
+
*
|
|
104
|
+
* @remarks
|
|
105
|
+
* Значение — уникальный owner микрофронтенда.
|
|
106
|
+
*
|
|
107
|
+
* После включения достаточно передавать через EventBus строковое имя:
|
|
108
|
+
*
|
|
109
|
+
* ```ts
|
|
110
|
+
* eventBus.emit("notification", {
|
|
111
|
+
* iconName: "AiOutline",
|
|
112
|
+
* })
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* Scanner автоматически найдёт `iconName: "AiOutline"`, plugin создаст
|
|
116
|
+
* lazy loader и зарегистрирует его в общем runtime registry.
|
|
117
|
+
*
|
|
118
|
+
* В runtime registry публикуются как scanner-detected имена,
|
|
119
|
+
* так и имена из `include`.
|
|
120
|
+
*
|
|
121
|
+
* Host сможет отрисовать:
|
|
122
|
+
*
|
|
123
|
+
* ```tsx
|
|
124
|
+
* <Icon name={event.iconName} />
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* без ручного `registerIcons()` и без перечисления иконок в `vite.config.ts`.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* dubiumIcons({
|
|
132
|
+
* runtimeRegistry: "profile-mf",
|
|
133
|
+
* })
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
runtimeRegistry?: string;
|
|
68
137
|
/**
|
|
69
138
|
* Директории проекта, которые нужно сканировать.
|
|
70
139
|
*
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import type { TDubiumIconSource } from "../plugin.types.js";
|
|
2
2
|
import type { ILocalSourceCatalog } from "../sources/sources.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Настройки автоматической публикации compile-time loaders в runtime registry.
|
|
5
|
+
*/
|
|
6
|
+
interface IRuntimeRegistryModuleOptions {
|
|
7
|
+
/** Имена, которые нужно опубликовать в runtime registry. */
|
|
8
|
+
iconNames: readonly string[];
|
|
9
|
+
/** Уникальный owner приложения/MF. */
|
|
10
|
+
owner: string;
|
|
11
|
+
}
|
|
3
12
|
/**
|
|
4
13
|
* Генерирует исходный код виртуального модуля с реестром иконок.
|
|
5
14
|
*
|
|
@@ -8,10 +17,14 @@ import type { ILocalSourceCatalog } from "../sources/sources.types.js";
|
|
|
8
17
|
* Благодаря этому для несуществующей статически обнаруженной иконки
|
|
9
18
|
* плагин выбрасывает понятную ошибку до генерации записи в реестре.
|
|
10
19
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
20
|
+
* Если передан `runtimeRegistry`, модуль дополнительно публикует указанные
|
|
21
|
+
* loaders в общий runtime registry через `registerIcons`.
|
|
22
|
+
*
|
|
23
|
+
* @param iconNames - Имена иконок для включения в compile-time registry
|
|
24
|
+
* @param localCatalogs - Локальные каталоги для разрешения путей импортов
|
|
13
25
|
* @param packageSource - Package-источник, используемый как fallback
|
|
14
26
|
* @param resolveImport - Резолвер пути импорта
|
|
27
|
+
* @param runtimeRegistry - Настройки автоматической runtime-публикации
|
|
15
28
|
* @returns Исходный код виртуального модуля
|
|
16
29
|
* @throws Если найденное имя иконки не разрешилось ни через local sources,
|
|
17
30
|
* ни через package source
|
|
@@ -20,4 +33,5 @@ export declare const createVirtualModuleSource: (iconNames: readonly string[], l
|
|
|
20
33
|
type: "package";
|
|
21
34
|
}> | undefined, resolveImport: (importPath: string) => Promise<{
|
|
22
35
|
id: string;
|
|
23
|
-
} | null | undefined
|
|
36
|
+
} | null | undefined>, runtimeRegistry?: IRuntimeRegistryModuleOptions) => Promise<string>;
|
|
37
|
+
export {};
|
|
@@ -1,27 +1,35 @@
|
|
|
1
1
|
//#region src/icons/vite/plugin/virtual/virtual.module.ts
|
|
2
|
-
var e = async (e, t, n, r) => {
|
|
3
|
-
let
|
|
4
|
-
for (let
|
|
2
|
+
var e = async (e, t, n, r, i) => {
|
|
3
|
+
let a = [];
|
|
4
|
+
for (let i of e) {
|
|
5
5
|
let e, o = !1;
|
|
6
6
|
for (let n of t) {
|
|
7
|
-
let t = n.icons.get(
|
|
7
|
+
let t = n.icons.get(i);
|
|
8
8
|
if (t) {
|
|
9
9
|
e = t;
|
|
10
10
|
break;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
if (!e && n && (e = n.importPattern.replaceAll("{name}",
|
|
14
|
-
if (o && !await r(e)) throw Error(`[@dubium/icons] Иконка "${
|
|
15
|
-
|
|
13
|
+
if (!e && n && (e = n.importPattern.replaceAll("{name}", i), o = !0), !e) throw Error(`[@dubium/icons] Иконка "${i}" не найдена ни в local sources, ни в package source.\nПроверьте настройки options.sources или добавьте компонент иконки в один из источников.`);
|
|
14
|
+
if (o && !await r(e)) throw Error(`[@dubium/icons] Иконка "${i}" не найдена: импорт "${e}" не резолвится.\nПроверьте наличие иконки в npm-пакете или настройки options.sources.`);
|
|
15
|
+
a.push(`\t${JSON.stringify(i)}: () => import(${JSON.stringify(e)}),`);
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
let o = i ? [...new Set(i.iconNames)].filter((t) => e.includes(t)) : [], s = i && o.length > 0 ? "import { registerIcons as __registerDubiumIcons } from \"@dubium/icons/vite/runtime\"\n\n" : "", c = o.map((e) => `\t${JSON.stringify(e)}: iconRegistry[${JSON.stringify(e)}],`), l = i && c.length > 0 ? `
|
|
18
|
+
|
|
19
|
+
const runtimeIconRegistry = {
|
|
20
|
+
${c.join("\n")}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
__registerDubiumIcons(${JSON.stringify(i.owner)}, runtimeIconRegistry)
|
|
24
|
+
` : "";
|
|
25
|
+
return `${s}/**
|
|
18
26
|
* СГЕНЕРИРОВАНО В ПАМЯТИ плагином @dubium/icons/vite.
|
|
19
|
-
* Содержит только ссылки на иконки, обнаруженные
|
|
27
|
+
* Содержит только ссылки на иконки, обнаруженные scanner-ом или добавленные через include.
|
|
20
28
|
*/
|
|
21
29
|
export const iconRegistry = {
|
|
22
|
-
${
|
|
30
|
+
${a.join("\n")}
|
|
23
31
|
}
|
|
24
|
-
`;
|
|
32
|
+
${l}`;
|
|
25
33
|
};
|
|
26
34
|
//#endregion
|
|
27
35
|
export { e as createVirtualModuleSource };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { getRuntimeIconLoader as e, getRuntimeIconsVersion as t, registerIcons as n, removeIconOwner as r, subscribeRuntimeIcons as i } from "./IconRuntime.registry.js";
|
|
2
|
+
export { e as getRuntimeIconLoader, t as getRuntimeIconsVersion, n as registerIcons, r as removeIconOwner, i as subscribeRuntimeIcons };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dubium/icons",
|
|
3
|
-
"version": "0.0.2-alpha.
|
|
3
|
+
"version": "0.0.2-alpha.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
"types": "./dist/vite/index.d.ts",
|
|
29
29
|
"import": "./dist/vite/index.js"
|
|
30
30
|
},
|
|
31
|
+
"./vite/runtime": {
|
|
32
|
+
"types": "./dist/vite/runtime/index.d.ts",
|
|
33
|
+
"import": "./dist/vite/runtime/index.js"
|
|
34
|
+
},
|
|
31
35
|
"./vite/plugin": {
|
|
32
36
|
"types": "./dist/vite/plugin/index.d.ts",
|
|
33
37
|
"import": "./dist/vite/plugin/index.js"
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { IIconComponentProps } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Цветная SVG-иконка.
|
|
4
|
-
*
|
|
5
|
-
* Исходные цвета сохраняются без изменений.
|
|
6
|
-
*/
|
|
7
|
-
export declare const GosuslugiIcon: ({ color: _color, secondaryColor: _secondaryColor, ...svgProps }: IIconComponentProps) => import("react").JSX.Element;
|
|
8
|
-
export default GosuslugiIcon;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
-
//#region src/icons/collection/GosuslugiIcon.tsx
|
|
3
|
-
var n = ({ color: n, secondaryColor: r, ...i }) => /* @__PURE__ */ t("svg", {
|
|
4
|
-
...i,
|
|
5
|
-
fill: "none",
|
|
6
|
-
viewBox: "0 0 24 24",
|
|
7
|
-
width: "100%",
|
|
8
|
-
height: "100%",
|
|
9
|
-
children: [
|
|
10
|
-
/* @__PURE__ */ e("path", {
|
|
11
|
-
fill: "url(#a)",
|
|
12
|
-
d: "M22.84 7.961c-.095-1.237-1.04-2.822-1.983-3.583a36 36 0 0 0-3.305-2.157A37 37 0 0 0 14.06.381a5.1 5.1 0 0 0-2.014-.38 5 5 0 0 0-2.014.38 37 37 0 0 0-3.493 1.84c-1.825 1.11-3.304 2.157-3.304 2.157A5.86 5.86 0 0 0 1.618 6.57c-.13.308.109.63.443.63h.93c.372 0 .705-.211.918-.516.241-.345.528-.66.856-.934 0 0 1.221-.859 2.728-1.769a31 31 0 0 1 2.884-1.508 4.1 4.1 0 0 1 1.663-.312c.57-.01 1.135.097 1.663.312q1.482.676 2.884 1.508 1.412.81 2.728 1.769c.78.624 1.56 1.924 1.637 2.938 0 0 .182 1.508.208 3.295a31 31 0 0 1-.182 3.303 4.8 4.8 0 0 1-1.663 2.938s-1.221.884-2.728 1.795a31 31 0 0 1-2.884 1.508 4.1 4.1 0 0 1-1.663.312 4.2 4.2 0 0 1-1.663-.304 30 30 0 0 1-2.884-1.509 33 33 0 0 1-2.728-1.794 4.4 4.4 0 0 1-.835-.928c-.208-.3-.539-.504-.904-.504h-.952c-.338 0-.577.329-.436.637.39.854.993 1.677 1.596 2.163 0 0 1.48 1.11 3.304 2.188q1.698 1.014 3.493 1.84c.64.259 1.325.385 2.014.37a5 5 0 0 0 2.014-.38 37 37 0 0 0 3.493-1.84c1.826-1.11 3.305-2.187 3.305-2.187a5.88 5.88 0 0 0 2.014-3.584q.216-2.008.22-4.028c-.032-2.178-.252-4.018-.252-4.018"
|
|
13
|
-
}),
|
|
14
|
-
/* @__PURE__ */ e("path", {
|
|
15
|
-
fill: "#0066b3",
|
|
16
|
-
d: "M1 9.361a.48.48 0 0 1 .48-.48h7.44a.48.48 0 0 1 .48.48v1.44a.48.48 0 0 1-.48.48H1z"
|
|
17
|
-
}),
|
|
18
|
-
/* @__PURE__ */ e("path", {
|
|
19
|
-
fill: "#ee2f53",
|
|
20
|
-
d: "M1 12.72h15.12a.48.48 0 0 1 .48.48v1.44a.48.48 0 0 1-.48.48H1.48a.48.48 0 0 1-.48-.48z"
|
|
21
|
-
}),
|
|
22
|
-
/* @__PURE__ */ e("defs", { children: /* @__PURE__ */ t("linearGradient", {
|
|
23
|
-
id: "a",
|
|
24
|
-
x1: "12.241",
|
|
25
|
-
x2: "12.241",
|
|
26
|
-
y1: "0",
|
|
27
|
-
y2: "24",
|
|
28
|
-
gradientUnits: "userSpaceOnUse",
|
|
29
|
-
children: [
|
|
30
|
-
/* @__PURE__ */ e("stop", { stopColor: "#0066b3" }),
|
|
31
|
-
/* @__PURE__ */ e("stop", {
|
|
32
|
-
offset: ".354",
|
|
33
|
-
stopColor: "#0066b3"
|
|
34
|
-
}),
|
|
35
|
-
/* @__PURE__ */ e("stop", {
|
|
36
|
-
offset: ".688",
|
|
37
|
-
stopColor: "#ee2f53"
|
|
38
|
-
}),
|
|
39
|
-
/* @__PURE__ */ e("stop", {
|
|
40
|
-
offset: "1",
|
|
41
|
-
stopColor: "#ee2f53"
|
|
42
|
-
})
|
|
43
|
-
]
|
|
44
|
-
}) })
|
|
45
|
-
]
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
|
-
export { n as GosuslugiIcon, n as default };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IIconComponentProps } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* SVG-иконка с поддержкой динамического цвета.
|
|
4
|
-
*/
|
|
5
|
-
export declare const InfoCircleDoubleFilledIcon: ({ color, secondaryColor, ...svgProps }: IIconComponentProps) => import("react").JSX.Element;
|
|
6
|
-
export default InfoCircleDoubleFilledIcon;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
-
//#region src/icons/collection/InfoCircleDoubleFilledIcon.tsx
|
|
3
|
-
var n = ({ color: n = "var(--icon-color, currentColor)", secondaryColor: r = "var(--icon-secondary-color, currentColor)", ...i }) => /* @__PURE__ */ t("svg", {
|
|
4
|
-
...i,
|
|
5
|
-
fill: "none",
|
|
6
|
-
viewBox: "0 0 24 24",
|
|
7
|
-
width: "100%",
|
|
8
|
-
height: "100%",
|
|
9
|
-
children: [/* @__PURE__ */ e("path", {
|
|
10
|
-
fill: n,
|
|
11
|
-
fillOpacity: ".05",
|
|
12
|
-
d: "M1.68 12C1.68 6.3 6.3 1.68 12 1.68S22.32 6.3 22.32 12 17.7 22.32 12 22.32 1.68 17.7 1.68 12"
|
|
13
|
-
}), /* @__PURE__ */ e("path", {
|
|
14
|
-
stroke: r,
|
|
15
|
-
strokeLinecap: "round",
|
|
16
|
-
strokeLinejoin: "round",
|
|
17
|
-
strokeOpacity: ".3",
|
|
18
|
-
strokeWidth: "1.8",
|
|
19
|
-
d: "M12 7.098h.014M10.6 11.3H12v5.602h1.401"
|
|
20
|
-
})]
|
|
21
|
-
});
|
|
22
|
-
//#endregion
|
|
23
|
-
export { n as InfoCircleDoubleFilledIcon, n as default };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IIconComponentProps } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* SVG-иконка с поддержкой динамического цвета.
|
|
4
|
-
*/
|
|
5
|
-
export declare const OkFilledIcon: ({ color, secondaryColor: _secondaryColor, ...svgProps }: IIconComponentProps) => import("react").JSX.Element;
|
|
6
|
-
export default OkFilledIcon;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
//#region src/icons/collection/OkFilledIcon.tsx
|
|
3
|
-
var t = ({ color: t = "var(--icon-color, currentColor)", secondaryColor: n, ...r }) => /* @__PURE__ */ e("svg", {
|
|
4
|
-
...r,
|
|
5
|
-
fill: "none",
|
|
6
|
-
viewBox: "0 0 24 24",
|
|
7
|
-
width: "100%",
|
|
8
|
-
height: "100%",
|
|
9
|
-
children: /* @__PURE__ */ e("path", {
|
|
10
|
-
fill: t,
|
|
11
|
-
d: "M12.002 5.679c1.017 0 1.845.809 1.845 1.803 0 .99-.828 1.8-1.845 1.8-1.018 0-1.846-.81-1.846-1.8 0-.994.828-1.803 1.846-1.803m0 6.281c2.53 0 4.582-2.006 4.582-4.478S14.531 3 12.002 3 7.415 5.01 7.415 7.482c0 2.469 2.057 4.478 4.587 4.478m1.802 3.425a8.3 8.3 0 0 0 2.587-1.047c.61-.375.792-1.162.409-1.758a1.32 1.32 0 0 0-1.8-.399 5.77 5.77 0 0 1-5.997 0 1.323 1.323 0 0 0-1.803.4c-.383.595-.2 1.382.412 1.757.803.497 1.68.847 2.587 1.047l-2.493 2.437a1.253 1.253 0 0 0 .003 1.803 1.324 1.324 0 0 0 1.845 0l2.448-2.391 2.45 2.391a1.33 1.33 0 0 0 1.846 0 1.256 1.256 0 0 0 0-1.803z"
|
|
12
|
-
})
|
|
13
|
-
});
|
|
14
|
-
//#endregion
|
|
15
|
-
export { t as OkFilledIcon, t as default };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IIconComponentProps } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* SVG-иконка с поддержкой динамического цвета.
|
|
4
|
-
*/
|
|
5
|
-
export declare const SogazFilledIcon: ({ color, secondaryColor: _secondaryColor, ...svgProps }: IIconComponentProps) => import("react").JSX.Element;
|
|
6
|
-
export default SogazFilledIcon;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
//#region src/icons/collection/SogazFilledIcon.tsx
|
|
3
|
-
var t = ({ color: t = "var(--icon-color, currentColor)", secondaryColor: n, ...r }) => /* @__PURE__ */ e("svg", {
|
|
4
|
-
...r,
|
|
5
|
-
fill: "none",
|
|
6
|
-
viewBox: "0 0 24 24",
|
|
7
|
-
width: "100%",
|
|
8
|
-
height: "100%",
|
|
9
|
-
children: /* @__PURE__ */ e("path", {
|
|
10
|
-
fill: t,
|
|
11
|
-
d: "M18.853 13.147c-3.677.882-6.235 4-6.824 9.059-.588-5.03-3.147-8.177-6.823-9.059-.647-3.941 2.853-7.412 6.823-7.412 3.971.03 7.442 3.47 6.824 7.412M24 12c0-6.618-5.382-12-12-12S0 5.382 0 12s5.382 12 12 12c6.647.03 12-5.353 12-12"
|
|
12
|
-
})
|
|
13
|
-
});
|
|
14
|
-
//#endregion
|
|
15
|
-
export { t as SogazFilledIcon, t as default };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IIconComponentProps } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* SVG-иконка с поддержкой динамического цвета.
|
|
4
|
-
*/
|
|
5
|
-
export declare const SogazLongFilledIcon: ({ color, secondaryColor: _secondaryColor, ...svgProps }: IIconComponentProps) => import("react").JSX.Element;
|
|
6
|
-
export default SogazLongFilledIcon;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
//#region src/icons/collection/SogazLongFilledIcon.tsx
|
|
3
|
-
var t = ({ color: t = "var(--icon-color, currentColor)", secondaryColor: n, ...r }) => /* @__PURE__ */ e("svg", {
|
|
4
|
-
...r,
|
|
5
|
-
fill: "none",
|
|
6
|
-
viewBox: "0 0 102 21",
|
|
7
|
-
width: "100%",
|
|
8
|
-
height: "100%",
|
|
9
|
-
children: /* @__PURE__ */ e("path", {
|
|
10
|
-
fill: t,
|
|
11
|
-
d: "M5.03 10.5c0-3.14 2.109-5.713 5.132-5.713 2.312 0 4.243 1.287 4.725 3.19h5.259C19.866 3.552 15.878 0 10.289 0 4.42 0 0 4.324 0 10.5S4.42 21 10.289 21c5.69 0 9.73-3.552 9.857-8.39h-5.259c-.406 2.214-2.235 3.603-4.725 3.603-2.77.026-5.132-2.47-5.132-5.713m34.017 1.004c-3.175.772-5.386 3.5-5.894 7.926-.508-4.4-2.718-7.154-5.894-7.926-.559-3.449 2.465-6.486 5.894-6.486 3.43.026 6.428 3.037 5.894 6.486m4.446-1.004c0-5.79-4.65-10.5-10.365-10.5-5.716 0-10.365 4.71-10.365 10.5S27.412 21 33.128 21c5.741.026 10.365-4.684 10.365-10.5m8.231-5.044h8.003V.798H46.21v19.404h5.513zM76.036 10.5c0 3.062-2.26 5.327-4.979 5.327-2.668 0-4.98-2.239-4.98-5.327 0-3.063 2.313-5.327 4.98-5.327 2.718.026 4.98 2.264 4.98 5.327m-.38 9.728h5.512V.798h-5.513v2.136C74.233 1.158 72.353.412 70.32.412c-5.182 0-9.298 4.04-9.298 10.114 0 6.073 4.116 10.114 9.298 10.114 2.033 0 3.913-.747 5.335-2.522zm25.912-14.129c0-3.217-2.718-5.816-8.206-5.816-5.843 0-8.866 3.32-8.866 7.412h5.36c0-2.136 1.17-3.243 3.405-3.243 2.108 0 3.023.772 3.023 1.982s-.66 2.059-2.312 2.059h-3.048v3.5h2.972c1.88 0 2.667.823 2.667 2.161 0 1.261-.813 2.47-3.226 2.47-2.591 0-3.76-1.337-3.76-3.55h-5.36c0 4.992 3.48 7.669 9.12 7.669 5.564 0 8.663-2.368 8.663-6.151 0-1.956-1.016-3.397-2.972-4.22 1.727-.876 2.54-2.549 2.54-4.273"
|
|
12
|
-
})
|
|
13
|
-
});
|
|
14
|
-
//#endregion
|
|
15
|
-
export { t as SogazLongFilledIcon, t as default };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { IIconComponentProps } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* SVG-иконка с поддержкой динамического цвета.
|
|
4
|
-
*/
|
|
5
|
-
export declare const TgFilledIcon: ({ color, secondaryColor: _secondaryColor, ...svgProps }: IIconComponentProps) => import("react").JSX.Element;
|
|
6
|
-
export default TgFilledIcon;
|