@getvitops/generator 8.0.1 → 8.2.0-alpha.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/CHANGELOG.md +382 -17
- package/assets/css/layout-utilities.css +13 -0
- package/assets/css/layout.css +31 -0
- package/assets/css/patterns/banner.css +7 -0
- package/assets/css/patterns/cluster.css +19 -0
- package/assets/css/patterns/comment.css +18 -0
- package/assets/css/patterns/gallery.css +16 -0
- package/assets/css/patterns/list.css +17 -0
- package/assets/css/patterns/marquee.css +6 -0
- package/assets/css/patterns/masonry.css +18 -0
- package/assets/js/consent.js +1 -1
- package/assets/js/deferred.js +1 -1
- package/assets/js/editor.js +2 -2
- package/assets/js/elements.js +4 -4
- package/assets/js/polyfills/adoptedStyleSheets.js +1 -1
- package/assets/js/polyfills/css-anchor-positioning-fn.js +4 -4
- package/assets/js/polyfills/global.esm.js +1 -1
- package/assets/js/polyfills/invokers-polyfill.js +1 -1
- package/assets/js/polyfills/popover.js +2 -2
- package/assets/js/polyfills/webcomponents-bundle.js +9 -9
- package/config.schema.json +333 -118
- package/dist/config-DvbYx3Gi.mjs +1971 -0
- package/dist/config-DvbYx3Gi.mjs.map +1 -0
- package/dist/config.d.mts +2544 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +3 -0
- package/dist/icons-sprite-Bf_KmKeX.d.mts +267 -0
- package/dist/icons-sprite-Bf_KmKeX.d.mts.map +1 -0
- package/dist/icons-sprite.d.mts +2 -0
- package/dist/icons-sprite.mjs +129 -0
- package/dist/icons-sprite.mjs.map +1 -0
- package/dist/index.d.mts +60 -2857
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +95 -2386
- package/dist/index.mjs.map +1 -1
- package/dist/schema-Dmq1J7S3.d.mts +292 -0
- package/dist/schema-Dmq1J7S3.d.mts.map +1 -0
- package/dist/tokens-8SXMDAd1.d.mts +229 -0
- package/dist/tokens-8SXMDAd1.d.mts.map +1 -0
- package/dist/tokens-zi594IZ3.mjs +697 -0
- package/dist/tokens-zi594IZ3.mjs.map +1 -0
- package/dist/tokens.d.mts +2 -0
- package/dist/tokens.mjs +3 -0
- package/package.json +17 -5
- package/schema.json +12 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.mts","names":[],"sources":["../src/config.ts"],"mappings":"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"}
|
package/dist/config.mjs
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { C as resolveTheme, E as validateConfig, S as resolvePrivacyContact, T as stripNulls, _ as getAt, a as CONFIG_VERSION, b as resolveConfig, c as JURISDICTIONS, d as SiteFontSchema, f as configJsonSchema, g as formatConfig, h as experimentDimensionWarnings, i as CONFIG_SCHEMA_URL, l as JURISDICTION_COUNTRIES, m as designSystemPath, n as BIGIN_DATA_CENTERS, o as CRM_PROVIDERS, p as deepMerge, r as CONFIG_SCHEMA_LOCAL_PATH, s as ConfigSchema, t as AD_PROVIDERS, u as PLAN_CAPABILITIES, v as isConfig, w as setAt, x as resolveInput, y as mergePatch } from "./config-DvbYx3Gi.mjs";
|
|
2
|
+
|
|
3
|
+
export { AD_PROVIDERS, BIGIN_DATA_CENTERS, CONFIG_SCHEMA_LOCAL_PATH, CONFIG_SCHEMA_URL, CONFIG_VERSION, CRM_PROVIDERS, ConfigSchema, JURISDICTIONS, JURISDICTION_COUNTRIES, PLAN_CAPABILITIES, SiteFontSchema, configJsonSchema, deepMerge, designSystemPath, experimentDimensionWarnings, formatConfig, getAt, isConfig, mergePatch, resolveConfig, resolveInput, resolvePrivacyContact, resolveTheme, setAt, stripNulls, validateConfig };
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Icon dimensions.
|
|
4
|
+
*
|
|
5
|
+
* Used in:
|
|
6
|
+
* icon (as is)
|
|
7
|
+
* alias (overwrite icon's properties)
|
|
8
|
+
* root of JSON file (default values)
|
|
9
|
+
*/
|
|
10
|
+
interface IconifyDimenisons {
|
|
11
|
+
// Left position of viewBox.
|
|
12
|
+
// Defaults to 0.
|
|
13
|
+
left?: number;
|
|
14
|
+
// Top position of viewBox.
|
|
15
|
+
// Defaults to 0.
|
|
16
|
+
top?: number;
|
|
17
|
+
// Width of viewBox.
|
|
18
|
+
// Defaults to 16.
|
|
19
|
+
width?: number;
|
|
20
|
+
// Height of viewBox.
|
|
21
|
+
// Defaults to 16.
|
|
22
|
+
height?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Icon transformations.
|
|
26
|
+
*
|
|
27
|
+
* Used in:
|
|
28
|
+
* icon (as is)
|
|
29
|
+
* alias (merged with icon's properties)
|
|
30
|
+
*/
|
|
31
|
+
interface IconifyTransformations {
|
|
32
|
+
// Number of 90 degrees rotations.
|
|
33
|
+
// 0 = 0, 1 = 90deg and so on.
|
|
34
|
+
// Defaults to 0.
|
|
35
|
+
// When merged (such as alias + icon), result is icon.rotation + alias.rotation.
|
|
36
|
+
rotate?: number;
|
|
37
|
+
// Horizontal flip.
|
|
38
|
+
// Defaults to false.
|
|
39
|
+
// When merged, result is icon.hFlip !== alias.hFlip
|
|
40
|
+
hFlip?: boolean;
|
|
41
|
+
// Vertical flip. (see hFlip comments)
|
|
42
|
+
vFlip?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Combination of dimensions and transformations.
|
|
46
|
+
*/
|
|
47
|
+
interface IconifyOptional extends IconifyDimenisons, IconifyTransformations {}
|
|
48
|
+
/**
|
|
49
|
+
* Alias.
|
|
50
|
+
*/
|
|
51
|
+
interface IconifyAlias extends IconifyOptional {
|
|
52
|
+
// Parent icon index without prefix, required.
|
|
53
|
+
parent: string;
|
|
54
|
+
// IconifyOptional properties.
|
|
55
|
+
// Alias should have only properties that it overrides.
|
|
56
|
+
// Transformations are merged, not overridden. See IconifyTransformations comments.
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Icon.
|
|
60
|
+
*/
|
|
61
|
+
interface IconifyIcon extends IconifyOptional {
|
|
62
|
+
// Icon body: <path d="..." />, required.
|
|
63
|
+
body: string;
|
|
64
|
+
// IconifyOptional properties.
|
|
65
|
+
// If property is missing in JSON file, look in root object for default value.
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Icon with optional parameters that are provided by API and affect only search
|
|
69
|
+
*/
|
|
70
|
+
interface APIIconAttributes {
|
|
71
|
+
// True if icon is hidden.
|
|
72
|
+
// Used in icon sets to keep icons that no longer exist, but should still be accessible
|
|
73
|
+
// from API, preventing websites from breaking when icon is removed by developer.
|
|
74
|
+
hidden?: boolean;
|
|
75
|
+
}
|
|
76
|
+
interface ExtendedIconifyIcon extends IconifyIcon, APIIconAttributes {}
|
|
77
|
+
interface ExtendedIconifyAlias extends IconifyAlias, APIIconAttributes {}
|
|
78
|
+
/**
|
|
79
|
+
* "icons" field of JSON file.
|
|
80
|
+
*/
|
|
81
|
+
interface IconifyIcons {
|
|
82
|
+
// Index is name of icon, without prefix. Value is ExtendedIconifyIcon object.
|
|
83
|
+
[index: string]: ExtendedIconifyIcon;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* "aliases" field of JSON file.
|
|
87
|
+
*/
|
|
88
|
+
interface IconifyAliases {
|
|
89
|
+
// Index is name of icon, without prefix. Value is ExtendedIconifyAlias object.
|
|
90
|
+
[index: string]: ExtendedIconifyAlias;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Icon set information block.
|
|
94
|
+
*/
|
|
95
|
+
interface IconifyInfo {
|
|
96
|
+
// Icon set name.
|
|
97
|
+
name: string;
|
|
98
|
+
// Total number of icons.
|
|
99
|
+
total?: number;
|
|
100
|
+
// Version string.
|
|
101
|
+
version?: string;
|
|
102
|
+
// Author information.
|
|
103
|
+
author: {
|
|
104
|
+
// Author name.
|
|
105
|
+
name: string;
|
|
106
|
+
// Link to author's website or icon set website.
|
|
107
|
+
url?: string;
|
|
108
|
+
};
|
|
109
|
+
// License
|
|
110
|
+
license: {
|
|
111
|
+
// Human readable license.
|
|
112
|
+
title: string;
|
|
113
|
+
// SPDX license identifier.
|
|
114
|
+
spdx?: string;
|
|
115
|
+
// License URL.
|
|
116
|
+
url?: string;
|
|
117
|
+
};
|
|
118
|
+
// Array of icons that should be used for samples in icon sets list.
|
|
119
|
+
samples?: string[];
|
|
120
|
+
// Icon grid: number or array of numbers.
|
|
121
|
+
height?: number | number[];
|
|
122
|
+
// Display height for samples: 16 - 24
|
|
123
|
+
displayHeight?: number;
|
|
124
|
+
// Category on Iconify collections list.
|
|
125
|
+
category?: string;
|
|
126
|
+
// List of tags to group similar icon sets.
|
|
127
|
+
tags?: string[];
|
|
128
|
+
// Palette status. True if icons have predefined color scheme, false if icons use currentColor.
|
|
129
|
+
// Ideally, icon set should not mix icons with and without palette to simplify search.
|
|
130
|
+
palette?: boolean;
|
|
131
|
+
// If true, icon set should not appear in icon sets list.
|
|
132
|
+
hidden?: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Optional themes, old format.
|
|
136
|
+
*
|
|
137
|
+
* Deprecated because format is unnecessary complicated. Key is meaningless, suffixes and prefixes are mixed together.
|
|
138
|
+
*/
|
|
139
|
+
interface LegacyIconifyThemes {
|
|
140
|
+
// Key is unique string.
|
|
141
|
+
[index: string]: {
|
|
142
|
+
// Theme title.
|
|
143
|
+
title: string;
|
|
144
|
+
// Icon prefix or suffix, including dash. All icons that start with prefix and end with suffix belong to theme.
|
|
145
|
+
prefix?: string; // Example: 'baseline-'
|
|
146
|
+
suffix?: string; // Example: '-filled'
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Characters used in font.
|
|
151
|
+
*/
|
|
152
|
+
interface IconifyChars {
|
|
153
|
+
// Index is character, such as "f000".
|
|
154
|
+
// Value is icon name.
|
|
155
|
+
[index: string]: string;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Icon categories
|
|
159
|
+
*/
|
|
160
|
+
interface IconifyCategories {
|
|
161
|
+
// Index is category title, such as "Weather".
|
|
162
|
+
// Value is array of icons that belong to that category.
|
|
163
|
+
// Each icon can belong to multiple categories or no categories.
|
|
164
|
+
[index: string]: string[];
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Meta data stored in JSON file, used for browsing icon set.
|
|
168
|
+
*/
|
|
169
|
+
interface IconifyMetaData {
|
|
170
|
+
// Icon set information block. Used for public icon sets, can be skipped for private icon sets.
|
|
171
|
+
info?: IconifyInfo;
|
|
172
|
+
// Characters used in font. Used for searching by character for icon sets imported from font, exporting icon set to font.
|
|
173
|
+
chars?: IconifyChars;
|
|
174
|
+
// Categories. Used for filtering icons.
|
|
175
|
+
categories?: IconifyCategories;
|
|
176
|
+
// Optional themes (old format).
|
|
177
|
+
themes?: LegacyIconifyThemes;
|
|
178
|
+
// Optional themes (new format). Key is prefix or suffix, value is title.
|
|
179
|
+
prefixes?: Record<string, string>;
|
|
180
|
+
suffixes?: Record<string, string>;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* JSON structure, contains only icon data
|
|
184
|
+
*/
|
|
185
|
+
interface IconifyJSONIconsData extends IconifyDimenisons {
|
|
186
|
+
// Prefix for icons in JSON file, required.
|
|
187
|
+
prefix: string;
|
|
188
|
+
// API provider, optional.
|
|
189
|
+
provider?: string;
|
|
190
|
+
// List of icons, required.
|
|
191
|
+
icons: IconifyIcons;
|
|
192
|
+
// Optional aliases.
|
|
193
|
+
aliases?: IconifyAliases;
|
|
194
|
+
// IconifyDimenisons properties that are used as default viewbox for icons when icon is missing value.
|
|
195
|
+
// If viewbox exists in both icon and root, use value from icon.
|
|
196
|
+
// This is used to reduce duplication.
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* JSON structure.
|
|
200
|
+
*
|
|
201
|
+
* All optional values can exist in root of JSON file, used as defaults.
|
|
202
|
+
*/
|
|
203
|
+
interface IconifyJSON extends IconifyJSONIconsData, IconifyMetaData {
|
|
204
|
+
// Last modification time of icons. Unix time stamp in seconds.
|
|
205
|
+
// Time is calculated only for icon data, ignoring metadata.
|
|
206
|
+
// Used to invalidate icons cache in components.
|
|
207
|
+
lastModified?: number;
|
|
208
|
+
// Optional list of missing icons. Returned by Iconify API when querying for icons that do not exist.
|
|
209
|
+
not_found?: string[];
|
|
210
|
+
}
|
|
211
|
+
//#endregion
|
|
212
|
+
//#region src/icons-sprite.d.ts
|
|
213
|
+
interface IconSpriteOptions {
|
|
214
|
+
/** Exactly `generateIconInclude()`'s shape: collection → icon names. */
|
|
215
|
+
include: Record<string, string[]>;
|
|
216
|
+
/**
|
|
217
|
+
* Extra ids pointing at an already-included icon, e.g. `{ 'icon-menu': 'ph:list' }`,
|
|
218
|
+
* so a consumer can reference a semantic name without knowing the set.
|
|
219
|
+
*/
|
|
220
|
+
aliases?: Record<string, string>;
|
|
221
|
+
/**
|
|
222
|
+
* Directory to resolve `@iconify-json/*` from. Defaults to `process.cwd()`.
|
|
223
|
+
*
|
|
224
|
+
* Load-bearing: the collections are the CONSUMER's dependency, not this
|
|
225
|
+
* package's, so a bare `import('@iconify-json/ph/…')` from inside the
|
|
226
|
+
* generator resolves against the generator's own node_modules and misses them
|
|
227
|
+
* entirely — which reads as "not installed" on a project that has them.
|
|
228
|
+
*/
|
|
229
|
+
resolveFrom?: string;
|
|
230
|
+
/** Injected in tests so the emitter can run without any @iconify-json/* installed. */
|
|
231
|
+
loadSet?: (prefix: string) => Promise<IconifyJSON | null>;
|
|
232
|
+
}
|
|
233
|
+
interface IconSpriteResult {
|
|
234
|
+
svg: string;
|
|
235
|
+
ids: string[];
|
|
236
|
+
/** `prefix:name` entries that were asked for but not found. */
|
|
237
|
+
missing: string[];
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* `ph:caret-down` → `ph--caret-down`.
|
|
241
|
+
*
|
|
242
|
+
* The one place this grammar lives. `Icon.astro` mirrors it and `icon.test.ts`
|
|
243
|
+
* guards the pair, because a drift here resolves `<use>` to nothing and renders
|
|
244
|
+
* as an empty box rather than an error.
|
|
245
|
+
*/
|
|
246
|
+
declare function spriteId(qualified: string): string;
|
|
247
|
+
declare function buildIconSprite(o: IconSpriteOptions): Promise<IconSpriteResult>;
|
|
248
|
+
/**
|
|
249
|
+
* One icon's renderable parts, for inlining into markup.
|
|
250
|
+
*
|
|
251
|
+
* Exists because `<Icon />` cannot go through astro-icon: its `./components`
|
|
252
|
+
* entry is a TypeScript file that Vite must transform, so it can only be
|
|
253
|
+
* reached by a statically-analysable import — and a static import is exactly
|
|
254
|
+
* what made the optional peer mandatory for anyone rendering Popover, Details
|
|
255
|
+
* or Drawer. Reading the collection directly sidesteps the peer entirely and
|
|
256
|
+
* shares this file's loader with the sprite, so both paths draw the same glyph.
|
|
257
|
+
*/
|
|
258
|
+
declare function loadIconSvg(qualified: string, opts?: {
|
|
259
|
+
resolveFrom?: string;
|
|
260
|
+
loadSet?: (prefix: string) => Promise<IconifyJSON | null>;
|
|
261
|
+
}): Promise<{
|
|
262
|
+
viewBox: string;
|
|
263
|
+
body: string;
|
|
264
|
+
} | null>;
|
|
265
|
+
//#endregion
|
|
266
|
+
export { spriteId as a, loadIconSvg as i, IconSpriteResult as n, buildIconSprite as r, IconSpriteOptions as t };
|
|
267
|
+
//# sourceMappingURL=icons-sprite-Bf_KmKeX.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons-sprite-Bf_KmKeX.d.mts","names":[],"sources":["../../../node_modules/.pnpm/@iconify+types@2.0.0/node_modules/@iconify/types/types.d.ts","../src/icons-sprite.ts"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;UAQiB;;;EAGhB;;;EAIA;;;EAIA;;;EAIA;;;;;;;;;UAUgB;;;;;EAKhB;;;;EAKA;;EAGA;;;;;UAMgB,wBACR,mBACP;;;;UAOe,qBAAqB;;EAErC;;;;;;;;UAUgB,oBAAoB;;EAEpC;;;;;;;UASS;;;;EAIT;;UAGgB,4BAA4B,aAAa;UACzC,6BAA6B,cAAc;;;;UAK3C;;GAEf,gBAAgB;;;;;UAMD;;GAEf,gBAAgB;;;;;UAMD;;EAEhB;;EAGA;;EAGA;;EAGA;;IAEC;;IAGA;;;EAID;;IAEC;;IAGA;;IAGA;;;EAID;;EAGA;;EAGA;;EAGA;;EAGA;;;EAIA;;EAGA;;;;;;;UAQgB;;GAEf;;IAEA;;IAGA;IACA;;;;;;UAOe;;;GAGf;;;;;UAMe;;;;GAIf;;;;;UAMe;;EAEhB,OAAO;;EAGP,QAAQ;;EAGR,aAAa;;EAGb,SAAS;;EAGT,WAAW;EACX,WAAW;;;;;UAMK,6BAA6B;;EAE7C;;EAGA;;EAGA,OAAO;;EAGP,UAAU;;;;;;;;;;UAYM,oBAAoB,sBAAsB;;;;EAI1D;;EAGA;;;;UCpOgB;;EAEf,SAAS;;;;;EAKT,UAAU;;;;;;;;;EASV;;EAEA,WAAW,mBAAmB,QAAQ;;UAGvB;EACf;EACA;;EAEA;;;;;;;;;iBAUc,SAAS;iBAsBH,gBAAgB,GAAG,oBAAoB,QAAQ;;;;;;;;;;;iBAsE/C,YACpB,mBACA;EAAS;EAAsB,WAAW,mBAAmB,QAAQ;IACpE;EAAU;EAAiB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
import { getIconData, iconToSVG, replaceIDs } from "@iconify/utils";
|
|
5
|
+
|
|
6
|
+
//#region src/icons-sprite.ts
|
|
7
|
+
/**
|
|
8
|
+
* Build an SVG sprite from an icon `include` map.
|
|
9
|
+
*
|
|
10
|
+
* This is the delivery path for consumers that cannot run an icon integration:
|
|
11
|
+
* Bricks/WordPress, EmDash's renderers, anything rendering HTML outside an Astro
|
|
12
|
+
* build. Markup is `<svg><use href="…/icons.svg#ph--caret-down"/></svg>` — no
|
|
13
|
+
* runtime JS and no network call, which is what keeps it inside the tier rules
|
|
14
|
+
* (a runtime-fetching element would be behaviour JS with no fallback to enhance).
|
|
15
|
+
*
|
|
16
|
+
* The icon DATA comes from the `@iconify-json/*` collections, which stay optional
|
|
17
|
+
* peers loaded dynamically: `@iconify-json/ph` alone is ~4.5 MB and the semantic
|
|
18
|
+
* map spans five sets, so depending on them directly would be indefensible for
|
|
19
|
+
* every consumer who never asks for a sprite.
|
|
20
|
+
*
|
|
21
|
+
* **Also its own pack entry, published as `@getvitops/generator/icons-sprite`** —
|
|
22
|
+
* Worker-safe (only `node:module`/`node:path`/`node:url` + `@iconify/utils`, no
|
|
23
|
+
* lightningcss), for `@getvitops/astro`'s `Icon.astro` to import instead of the
|
|
24
|
+
* root entry. The root entry also re-exports `generate.ts`, whose lightningcss
|
|
25
|
+
* dependency needs a native `.node` binary — a *static* import of the root from
|
|
26
|
+
* an SSR component drags that into the bundle unconditionally, and Cloudflare
|
|
27
|
+
* Workers has no `require()` for it. This 500'd every request on a real
|
|
28
|
+
* consumer before the import was moved to this subpath.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* `ph:caret-down` → `ph--caret-down`.
|
|
32
|
+
*
|
|
33
|
+
* The one place this grammar lives. `Icon.astro` mirrors it and `icon.test.ts`
|
|
34
|
+
* guards the pair, because a drift here resolves `<use>` to nothing and renders
|
|
35
|
+
* as an empty box rather than an error.
|
|
36
|
+
*/
|
|
37
|
+
function spriteId(qualified) {
|
|
38
|
+
return qualified.replace(":", "--");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Default loader: the collection JSON shipped by `@iconify-json/<prefix>`.
|
|
42
|
+
*
|
|
43
|
+
* Resolved through a `createRequire` rooted at the consumer's directory, then
|
|
44
|
+
* imported by absolute path — a bare specifier would resolve against this
|
|
45
|
+
* package instead, where the collections deliberately aren't installed.
|
|
46
|
+
*/
|
|
47
|
+
async function loadCollection(prefix, from) {
|
|
48
|
+
try {
|
|
49
|
+
const path = createRequire(pathToFileURL(join(from, "noop.js"))).resolve(`@iconify-json/${prefix}/icons.json`);
|
|
50
|
+
const mod = await import(pathToFileURL(path).href, { with: { type: "json" } });
|
|
51
|
+
return mod.default ?? mod;
|
|
52
|
+
} catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async function buildIconSprite(o) {
|
|
57
|
+
const from = o.resolveFrom ?? process.cwd();
|
|
58
|
+
const load = o.loadSet ?? ((prefix) => loadCollection(prefix, from));
|
|
59
|
+
const symbols = [];
|
|
60
|
+
const ids = [];
|
|
61
|
+
const missing = [];
|
|
62
|
+
/** qualified name → its rendered body+viewBox, so an alias can reuse it. */
|
|
63
|
+
const rendered = /* @__PURE__ */ new Map();
|
|
64
|
+
for (const [prefix, names] of Object.entries(o.include)) {
|
|
65
|
+
if (!names?.length) continue;
|
|
66
|
+
const set = await load(prefix);
|
|
67
|
+
if (!set) throw new Error(`[vitops icons] Cannot build the sprite: the "${prefix}" icon set is not installed. Run \`pnpm add -D @iconify-json/${prefix}\`, or drop it from your icons config.`);
|
|
68
|
+
for (const name of names) {
|
|
69
|
+
const data = getIconData(set, name);
|
|
70
|
+
if (!data) {
|
|
71
|
+
missing.push(`${prefix}:${name}`);
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const built = iconToSVG(data, { height: "none" });
|
|
75
|
+
const body = replaceIDs(built.body);
|
|
76
|
+
const id = spriteId(`${prefix}:${name}`);
|
|
77
|
+
rendered.set(`${prefix}:${name}`, {
|
|
78
|
+
viewBox: built.attributes.viewBox,
|
|
79
|
+
body
|
|
80
|
+
});
|
|
81
|
+
ids.push(id);
|
|
82
|
+
symbols.push(`<symbol id="${id}" viewBox="${built.attributes.viewBox}">${body}</symbol>`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
for (const [alias, target] of Object.entries(o.aliases ?? {})) {
|
|
86
|
+
const hit = rendered.get(target);
|
|
87
|
+
if (!hit) {
|
|
88
|
+
missing.push(`${target} (aliased as ${alias})`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
ids.push(alias);
|
|
92
|
+
symbols.push(`<symbol id="${alias}" viewBox="${hit.viewBox}">${hit.body}</symbol>`);
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
svg: `<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">` + symbols.join("") + `</svg>\n`,
|
|
96
|
+
ids,
|
|
97
|
+
missing
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* One icon's renderable parts, for inlining into markup.
|
|
102
|
+
*
|
|
103
|
+
* Exists because `<Icon />` cannot go through astro-icon: its `./components`
|
|
104
|
+
* entry is a TypeScript file that Vite must transform, so it can only be
|
|
105
|
+
* reached by a statically-analysable import — and a static import is exactly
|
|
106
|
+
* what made the optional peer mandatory for anyone rendering Popover, Details
|
|
107
|
+
* or Drawer. Reading the collection directly sidesteps the peer entirely and
|
|
108
|
+
* shares this file's loader with the sprite, so both paths draw the same glyph.
|
|
109
|
+
*/
|
|
110
|
+
async function loadIconSvg(qualified, opts) {
|
|
111
|
+
const i = qualified.indexOf(":");
|
|
112
|
+
if (i <= 0) return null;
|
|
113
|
+
const prefix = qualified.slice(0, i);
|
|
114
|
+
const name = qualified.slice(i + 1);
|
|
115
|
+
const from = opts?.resolveFrom ?? process.cwd();
|
|
116
|
+
const set = await (opts?.loadSet ?? ((p) => loadCollection(p, from)))(prefix);
|
|
117
|
+
if (!set) return null;
|
|
118
|
+
const data = getIconData(set, name);
|
|
119
|
+
if (!data) return null;
|
|
120
|
+
const built = iconToSVG(data, { height: "none" });
|
|
121
|
+
return {
|
|
122
|
+
viewBox: built.attributes.viewBox,
|
|
123
|
+
body: replaceIDs(built.body)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//#endregion
|
|
128
|
+
export { buildIconSprite, loadIconSvg, spriteId };
|
|
129
|
+
//# sourceMappingURL=icons-sprite.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons-sprite.mjs","names":[],"sources":["../src/icons-sprite.ts"],"sourcesContent":["/**\n * Build an SVG sprite from an icon `include` map.\n *\n * This is the delivery path for consumers that cannot run an icon integration:\n * Bricks/WordPress, EmDash's renderers, anything rendering HTML outside an Astro\n * build. Markup is `<svg><use href=\"…/icons.svg#ph--caret-down\"/></svg>` — no\n * runtime JS and no network call, which is what keeps it inside the tier rules\n * (a runtime-fetching element would be behaviour JS with no fallback to enhance).\n *\n * The icon DATA comes from the `@iconify-json/*` collections, which stay optional\n * peers loaded dynamically: `@iconify-json/ph` alone is ~4.5 MB and the semantic\n * map spans five sets, so depending on them directly would be indefensible for\n * every consumer who never asks for a sprite.\n *\n * **Also its own pack entry, published as `@getvitops/generator/icons-sprite`** —\n * Worker-safe (only `node:module`/`node:path`/`node:url` + `@iconify/utils`, no\n * lightningcss), for `@getvitops/astro`'s `Icon.astro` to import instead of the\n * root entry. The root entry also re-exports `generate.ts`, whose lightningcss\n * dependency needs a native `.node` binary — a *static* import of the root from\n * an SSR component drags that into the bundle unconditionally, and Cloudflare\n * Workers has no `require()` for it. This 500'd every request on a real\n * consumer before the import was moved to this subpath.\n */\nimport { createRequire } from 'node:module';\nimport { join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { IconifyJSON } from '@iconify/types';\nimport { getIconData, iconToSVG, replaceIDs } from '@iconify/utils';\n\nexport interface IconSpriteOptions {\n /** Exactly `generateIconInclude()`'s shape: collection → icon names. */\n include: Record<string, string[]>;\n /**\n * Extra ids pointing at an already-included icon, e.g. `{ 'icon-menu': 'ph:list' }`,\n * so a consumer can reference a semantic name without knowing the set.\n */\n aliases?: Record<string, string>;\n /**\n * Directory to resolve `@iconify-json/*` from. Defaults to `process.cwd()`.\n *\n * Load-bearing: the collections are the CONSUMER's dependency, not this\n * package's, so a bare `import('@iconify-json/ph/…')` from inside the\n * generator resolves against the generator's own node_modules and misses them\n * entirely — which reads as \"not installed\" on a project that has them.\n */\n resolveFrom?: string;\n /** Injected in tests so the emitter can run without any @iconify-json/* installed. */\n loadSet?: (prefix: string) => Promise<IconifyJSON | null>;\n}\n\nexport interface IconSpriteResult {\n svg: string;\n ids: string[];\n /** `prefix:name` entries that were asked for but not found. */\n missing: string[];\n}\n\n/**\n * `ph:caret-down` → `ph--caret-down`.\n *\n * The one place this grammar lives. `Icon.astro` mirrors it and `icon.test.ts`\n * guards the pair, because a drift here resolves `<use>` to nothing and renders\n * as an empty box rather than an error.\n */\nexport function spriteId(qualified: string): string {\n return qualified.replace(':', '--');\n}\n\n/**\n * Default loader: the collection JSON shipped by `@iconify-json/<prefix>`.\n *\n * Resolved through a `createRequire` rooted at the consumer's directory, then\n * imported by absolute path — a bare specifier would resolve against this\n * package instead, where the collections deliberately aren't installed.\n */\nasync function loadCollection(prefix: string, from: string): Promise<IconifyJSON | null> {\n try {\n const req = createRequire(pathToFileURL(join(from, 'noop.js')));\n const path = req.resolve(`@iconify-json/${prefix}/icons.json`);\n const mod = await import(pathToFileURL(path).href, { with: { type: 'json' } });\n return (mod.default ?? mod) as IconifyJSON;\n } catch {\n return null;\n }\n}\n\nexport async function buildIconSprite(o: IconSpriteOptions): Promise<IconSpriteResult> {\n const from = o.resolveFrom ?? process.cwd();\n const load = o.loadSet ?? ((prefix: string) => loadCollection(prefix, from));\n const symbols: string[] = [];\n const ids: string[] = [];\n const missing: string[] = [];\n /** qualified name → its rendered body+viewBox, so an alias can reuse it. */\n const rendered = new Map<string, { viewBox: string; body: string }>();\n\n for (const [prefix, names] of Object.entries(o.include)) {\n if (!names?.length) continue;\n const set = await load(prefix);\n if (!set) {\n throw new Error(\n `[vitops icons] Cannot build the sprite: the \"${prefix}\" icon set is not installed. ` +\n `Run \\`pnpm add -D @iconify-json/${prefix}\\`, or drop it from your icons config.`,\n );\n }\n for (const name of names) {\n // getIconData resolves aliases and parent chains, so `include` can name\n // either a real icon or one of the set's own aliases.\n const data = getIconData(set, name);\n if (!data) {\n missing.push(`${prefix}:${name}`);\n continue;\n }\n const built = iconToSVG(data, { height: 'none' });\n // MANDATORY. Two icons carrying the same internal gradient/clip id would\n // otherwise collide once concatenated into one document, and the second\n // silently renders with the first's paint.\n const body = replaceIDs(built.body);\n const id = spriteId(`${prefix}:${name}`);\n rendered.set(`${prefix}:${name}`, { viewBox: built.attributes.viewBox, body });\n ids.push(id);\n symbols.push(`<symbol id=\"${id}\" viewBox=\"${built.attributes.viewBox}\">${body}</symbol>`);\n }\n }\n\n for (const [alias, target] of Object.entries(o.aliases ?? {})) {\n const hit = rendered.get(target);\n if (!hit) {\n missing.push(`${target} (aliased as ${alias})`);\n continue;\n }\n // The body is DUPLICATED rather than nested as <use href=\"#target\"> inside\n // the symbol. Nested-use is legal but unreliable precisely under an\n // external-file <use>, which is exactly how this sprite is consumed; a\n // handful of duplicated paths in a ~40 KB file is the cheaper trade.\n ids.push(alias);\n symbols.push(`<symbol id=\"${alias}\" viewBox=\"${hit.viewBox}\">${hit.body}</symbol>`);\n }\n\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\" aria-hidden=\"true\">` +\n symbols.join('') +\n `</svg>\\n`;\n\n return { svg, ids, missing };\n}\n\n/**\n * One icon's renderable parts, for inlining into markup.\n *\n * Exists because `<Icon />` cannot go through astro-icon: its `./components`\n * entry is a TypeScript file that Vite must transform, so it can only be\n * reached by a statically-analysable import — and a static import is exactly\n * what made the optional peer mandatory for anyone rendering Popover, Details\n * or Drawer. Reading the collection directly sidesteps the peer entirely and\n * shares this file's loader with the sprite, so both paths draw the same glyph.\n */\nexport async function loadIconSvg(\n qualified: string,\n opts?: { resolveFrom?: string; loadSet?: (prefix: string) => Promise<IconifyJSON | null> },\n): Promise<{ viewBox: string; body: string } | null> {\n const i = qualified.indexOf(':');\n if (i <= 0) return null;\n const prefix = qualified.slice(0, i);\n const name = qualified.slice(i + 1);\n const from = opts?.resolveFrom ?? process.cwd();\n const load = opts?.loadSet ?? ((p: string) => loadCollection(p, from));\n const set = await load(prefix);\n if (!set) return null;\n const data = getIconData(set, name);\n if (!data) return null;\n const built = iconToSVG(data, { height: 'none' });\n // Same id-collision guard as the sprite: several inlined icons share one\n // document, so an un-rewritten gradient id would cross-render.\n return { viewBox: built.attributes.viewBox, body: replaceIDs(built.body) };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA,SAAgB,SAAS,WAA2B;CAClD,OAAO,UAAU,QAAQ,KAAK,IAAI;AACpC;;;;;;;;AASA,eAAe,eAAe,QAAgB,MAA2C;CACvF,IAAI;EAEF,MAAM,OADM,cAAc,cAAc,KAAK,MAAM,SAAS,CAAC,CAC9C,CAAC,CAAC,QAAQ,iBAAiB,OAAO,YAAY;EAC7D,MAAM,MAAM,MAAM,OAAO,cAAc,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,EAAE;EAC5E,OAAQ,IAAI,WAAW;CACzB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,eAAsB,gBAAgB,GAAiD;CACrF,MAAM,OAAO,EAAE,eAAe,QAAQ,IAAI;CAC1C,MAAM,OAAO,EAAE,aAAa,WAAmB,eAAe,QAAQ,IAAI;CAC1E,MAAM,UAAoB,CAAC;CAC3B,MAAM,MAAgB,CAAC;CACvB,MAAM,UAAoB,CAAC;;CAE3B,MAAM,2BAAW,IAAI,IAA+C;CAEpE,KAAK,MAAM,CAAC,QAAQ,UAAU,OAAO,QAAQ,EAAE,OAAO,GAAG;EACvD,IAAI,CAAC,OAAO,QAAQ;EACpB,MAAM,MAAM,MAAM,KAAK,MAAM;EAC7B,IAAI,CAAC,KACH,MAAM,IAAI,MACR,gDAAgD,OAAO,+DAClB,OAAO,uCAC9C;EAEF,KAAK,MAAM,QAAQ,OAAO;GAGxB,MAAM,OAAO,YAAY,KAAK,IAAI;GAClC,IAAI,CAAC,MAAM;IACT,QAAQ,KAAK,GAAG,OAAO,GAAG,MAAM;IAChC;GACF;GACA,MAAM,QAAQ,UAAU,MAAM,EAAE,QAAQ,OAAO,CAAC;GAIhD,MAAM,OAAO,WAAW,MAAM,IAAI;GAClC,MAAM,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM;GACvC,SAAS,IAAI,GAAG,OAAO,GAAG,QAAQ;IAAE,SAAS,MAAM,WAAW;IAAS;GAAK,CAAC;GAC7E,IAAI,KAAK,EAAE;GACX,QAAQ,KAAK,eAAe,GAAG,aAAa,MAAM,WAAW,QAAQ,IAAI,KAAK,UAAU;EAC1F;CACF;CAEA,KAAK,MAAM,CAAC,OAAO,WAAW,OAAO,QAAQ,EAAE,WAAW,CAAC,CAAC,GAAG;EAC7D,MAAM,MAAM,SAAS,IAAI,MAAM;EAC/B,IAAI,CAAC,KAAK;GACR,QAAQ,KAAK,GAAG,OAAO,eAAe,MAAM,EAAE;GAC9C;EACF;EAKA,IAAI,KAAK,KAAK;EACd,QAAQ,KAAK,eAAe,MAAM,aAAa,IAAI,QAAQ,IAAI,IAAI,KAAK,UAAU;CACpF;CAOA,OAAO;EAAE,KAJP,qFACA,QAAQ,KAAK,EAAE,IACf;EAEY;EAAK;CAAQ;AAC7B;;;;;;;;;;;AAYA,eAAsB,YACpB,WACA,MACmD;CACnD,MAAM,IAAI,UAAU,QAAQ,GAAG;CAC/B,IAAI,KAAK,GAAG,OAAO;CACnB,MAAM,SAAS,UAAU,MAAM,GAAG,CAAC;CACnC,MAAM,OAAO,UAAU,MAAM,IAAI,CAAC;CAClC,MAAM,OAAO,MAAM,eAAe,QAAQ,IAAI;CAE9C,MAAM,MAAM,OADC,MAAM,aAAa,MAAc,eAAe,GAAG,IAAI,GAC9C,CAAC,MAAM;CAC7B,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,OAAO,YAAY,KAAK,IAAI;CAClC,IAAI,CAAC,MAAM,OAAO;CAClB,MAAM,QAAQ,UAAU,MAAM,EAAE,QAAQ,OAAO,CAAC;CAGhD,OAAO;EAAE,SAAS,MAAM,WAAW;EAAS,MAAM,WAAW,MAAM,IAAI;CAAE;AAC3E"}
|