@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.
@@ -2,10 +2,10 @@
2
2
  * Публичный API Vite-плагина {@link dubiumIcons}.
3
3
  *
4
4
  * @remarks
5
- * Плагин сканирует исходники приложения, строит виртуальный модуль
6
- * `virtual:@dubium/icons-registry` с реестром только реально используемых
7
- * иконок и разрешает его через `resolveId`/`load`.
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` виде JSX-тегов и строковых конфигураций) и генерирует
8
+ * Vite-компонента `Icon` и строковые конфигурации, после чего генерирует
9
9
  * виртуальный модуль `virtual:@dubium/icons-registry` с ленивыми загрузчиками
10
10
  * только для используемых иконок.
11
11
  *
12
- * По умолчанию компонентом считается любой JSX-тег `<Icon>`, имя которого
13
- * импортировано из `@dubium/icons/vite`. Набор имён можно переопределить через
14
- * `options.componentNames`, а список свойств, значения которых трактуются как имена
15
- * иконок, — через `options.propertyNames`. Теги прочих компонентов, например
16
- * `<IconButton>`, игнорируются.
12
+ * Дополнительно:
17
13
  *
18
- * Сканируются все файлы директории `src` (настраивается через `options.scan`).
19
- * Источником иконок по умолчанию является пакет `@dubium/icons` с подстановкой
20
- * имени в `importPattern`; локальные каталоги SVG-файлов подключаются через
21
- * `options.sources`.
14
+ * - `include` позволяет явно добавить динамические имена в compile-time registry;
15
+ * - `runtimeRegistry` публикует итоговый compile-time registry в общий runtime registry.
22
16
  *
23
- * Динамические имена вида `<Icon name={expression}>` не могут быть разрешены
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
- * // vite.config.ts
33
- * import { defineConfig } from "vite"
34
- * import { dubiumIcons } from "@dubium/icons/vite/plugin"
25
+ * // Host: динамические имена заранее известны Host.
26
+ * dubiumIcons({
27
+ * include: ["AiOutline", "AlertCircleOutline"],
28
+ * })
29
+ * ```
35
30
  *
36
- * export default defineConfig({
37
- * plugins: [dubiumIcons()],
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 c } from "./virtual/virtual.module.js";
7
- import { readFile as l } from "node:fs/promises";
8
- import { extname as u, relative as d, resolve as f } from "node:path";
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 p = (e, t) => {
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
- }, m = (m = {}) => {
15
- let h = m.componentNames ? [...m.componentNames] : [], g = m.propertyNames ? [...m.propertyNames] : [], _ = m.scan ? [...m.scan] : ["src"], v = m.sources ? [...m.sources] : [{
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(v);
20
- let y = v.filter((e) => e.type === "local"), b = v.find((e) => e.type === "package"), x = /* @__PURE__ */ new Map(), S = /* @__PURE__ */ new Map(), C = [], w = process.cwd(), T, E = "", D = () => {
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 x.values()) for (let n of t) e.add(n);
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
- }, O = async (n, r) => {
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(u(n).toLowerCase())) {
27
- let e = x.delete(a), t = S.delete(a);
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 l(n, "utf8");
43
+ o = r ? await r() : await u(n, "utf8");
33
44
  } catch {
34
- let e = x.delete(a), t = S.delete(a);
45
+ let e = E.delete(a), t = D.delete(a);
35
46
  return e || t;
36
47
  }
37
- let s = x.get(a) ?? /* @__PURE__ */ new Set(), c = S.get(a) ?? 0, d = e(o, h, g);
38
- return x.set(a, d.icons), d.dynamicNames > 0 ? S.set(a, d.dynamicNames) : S.delete(a), !p(s, d.icons) || c !== d.dynamicNames;
39
- }, k = async (e) => {
40
- x.clear(), S.clear();
41
- for (let t of _) {
42
- let r = f(w, t), i;
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 O(t);
60
+ for (let t of i) e?.addWatchFile(t), await P(t);
50
61
  }
51
- }, A = async () => {
52
- C = await Promise.all(y.map((e) => a(w, e)));
53
- }, j = (e) => y.some((t) => r(f(w, t.path), e)), M = (e) => _.some((t) => r(f(w, t), e)), N = () => {
54
- if (!T) return;
55
- let e = T.moduleGraph.getModuleById(s);
56
- e && T.moduleGraph.invalidateModule(e), T.ws.send({ type: "full-reload" });
57
- }, P = (e) => {
58
- if (S.size === 0) {
59
- E = "";
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 = [...S.entries()].sort(([e], [t]) => e.localeCompare(t)).map(([e, t]) => ` - ${i(d(w, e))}: ${t}`).join("\n");
63
- t !== E && (E = t, e(`[@dubium/icons] Найдены динамические <Icon name={...}>:\n${t}\nДля MF/EventBus это допустимо, если loader регистрируется remote через runtime registry.`));
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
- w = e.root;
80
+ k = e.root;
70
81
  },
71
82
  async buildStart() {
72
- await A(), await k(this), P((e) => this.warn(e));
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
- T = e;
76
- for (let t of y) e.watcher.add(f(w, t.path));
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 = j(e), n = M(e) ? await O(e) : !1, r = () => {
79
- N(), P((e) => {
80
- T?.config.logger.warn(e);
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 A(), r();
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
- return e === s ? c(D(), C, b, (e) => this.resolve(e)) : null;
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 (M(e.file) && await O(e.file, e.read)) return N(), P((e) => this.warn(e)), [];
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 { m as dubiumIcons };
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
- * `UserIcon.tsx` при suffix `Icon` даёт имя `User`.
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
- * @param iconNames - Имена иконок для включения в реестр
12
- * @param localCatalogs - Локальные каталоги для разрешения путей импорта
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>) => Promise<string>;
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 i = [];
4
- for (let a of e) {
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(a);
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}", a), o = !0), !e) throw Error(`[@dubium/icons] Иконка "${a}" не найдена ни в local sources, ни в package source.\nПроверьте настройки options.sources или добавьте компонент иконки в один из источников.`);
14
- if (o && !await r(e)) throw Error(`[@dubium/icons] Иконка "${a}" не найдена: импорт "${e}" не резолвится.\nПроверьте наличие иконки в npm-пакете или настройки options.sources.`);
15
- i.push(`\t${JSON.stringify(a)}: () => import(${JSON.stringify(e)}),`);
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
- return `/**
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
- * Содержит только ссылки на иконки, обнаруженные в этом приложении/MF.
27
+ * Содержит только ссылки на иконки, обнаруженные scanner-ом или добавленные через include.
20
28
  */
21
29
  export const iconRegistry = {
22
- ${i.join("\n")}
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.5",
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;