solfaces 2.2.0 → 2.3.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.
Files changed (64) hide show
  1. package/README.md +45 -19
  2. package/SKILL.md +2 -3
  3. package/dist/agent/index.cjs +13 -14
  4. package/dist/agent/index.js +3 -4
  5. package/dist/agent/mcp-server.cjs +326 -333
  6. package/dist/{chunk-5DT27HMT.js → chunk-2KW35VRI.js} +3 -3
  7. package/dist/{chunk-5DT27HMT.js.map → chunk-2KW35VRI.js.map} +1 -1
  8. package/dist/{chunk-PVJR3SFG.cjs → chunk-BI3GHRKQ.cjs} +14 -15
  9. package/dist/chunk-BI3GHRKQ.cjs.map +1 -0
  10. package/dist/{chunk-DRUSCLEF.js → chunk-MYUSB4LA.js} +28 -8
  11. package/dist/chunk-MYUSB4LA.js.map +1 -0
  12. package/dist/{chunk-3CE7Q44S.js → chunk-N5GDLCCL.js} +324 -110
  13. package/dist/chunk-N5GDLCCL.js.map +1 -0
  14. package/dist/{chunk-74CSG63X.js → chunk-O2IIBSQH.js} +6 -7
  15. package/dist/chunk-O2IIBSQH.js.map +1 -0
  16. package/dist/{chunk-6QRDULAO.cjs → chunk-PCSRDAWQ.cjs} +28 -7
  17. package/dist/chunk-PCSRDAWQ.cjs.map +1 -0
  18. package/dist/{chunk-WIXGHS77.cjs → chunk-T7HEUW2O.cjs} +6 -6
  19. package/dist/{chunk-WIXGHS77.cjs.map → chunk-T7HEUW2O.cjs.map} +1 -1
  20. package/dist/{chunk-F54WHRCE.cjs → chunk-W2U6ITMR.cjs} +328 -110
  21. package/dist/chunk-W2U6ITMR.cjs.map +1 -0
  22. package/dist/core/index.cjs +43 -44
  23. package/dist/core/index.d.cts +39 -5
  24. package/dist/core/index.d.ts +39 -5
  25. package/dist/core/index.js +2 -3
  26. package/dist/index.cjs +53 -50
  27. package/dist/index.d.cts +3 -3
  28. package/dist/index.d.ts +3 -3
  29. package/dist/index.js +4 -5
  30. package/dist/react/index.cjs +107 -120
  31. package/dist/react/index.cjs.map +1 -1
  32. package/dist/react/index.d.cts +23 -1
  33. package/dist/react/index.d.ts +23 -1
  34. package/dist/react/index.js +95 -108
  35. package/dist/react/index.js.map +1 -1
  36. package/dist/solfaces.cdn.global.js +2 -2
  37. package/dist/solfaces.cdn.global.js.map +1 -1
  38. package/dist/themes/index.cjs +18 -14
  39. package/dist/themes/index.d.cts +30 -4
  40. package/dist/themes/index.d.ts +30 -4
  41. package/dist/themes/index.js +1 -1
  42. package/dist/traits-D4tbtZIr.d.cts +259 -0
  43. package/dist/traits-D4tbtZIr.d.ts +259 -0
  44. package/dist/vanilla/index.cjs +6 -7
  45. package/dist/vanilla/index.cjs.map +1 -1
  46. package/dist/vanilla/index.d.cts +1 -1
  47. package/dist/vanilla/index.d.ts +1 -1
  48. package/dist/vanilla/index.js +2 -3
  49. package/dist/vanilla/index.js.map +1 -1
  50. package/package.json +4 -1
  51. package/python/solfaces.py +103 -119
  52. package/reference/integrations.md +1 -1
  53. package/dist/chunk-3CE7Q44S.js.map +0 -1
  54. package/dist/chunk-6QRDULAO.cjs.map +0 -1
  55. package/dist/chunk-74CSG63X.js.map +0 -1
  56. package/dist/chunk-CKHLRORB.js +0 -239
  57. package/dist/chunk-CKHLRORB.js.map +0 -1
  58. package/dist/chunk-DRUSCLEF.js.map +0 -1
  59. package/dist/chunk-F54WHRCE.cjs.map +0 -1
  60. package/dist/chunk-PVJR3SFG.cjs.map +0 -1
  61. package/dist/chunk-TYTBYDQU.cjs +0 -244
  62. package/dist/chunk-TYTBYDQU.cjs.map +0 -1
  63. package/dist/traits-sfe7rM9C.d.cts +0 -106
  64. package/dist/traits-sfe7rM9C.d.ts +0 -106
@@ -0,0 +1,259 @@
1
+ /** Deterministic trait indices generated from a wallet address. Each index selects a visual variant. */
2
+ interface SolFaceTraits {
3
+ /** Face shape variant (0–3). Consumed for PRNG ordering; all faces render as squircle. */
4
+ faceShape: number;
5
+ /** Skin tone index (0–9). Maps to: Porcelain, Ivory, Fair, Light, Sand, Golden, Warm, Caramel, Brown, Deep. */
6
+ skinColor: number;
7
+ /** Eye shape variant (0–8). Maps to: Round, Minimal, Almond, Wide, Relaxed, Joyful, Bright, Gentle, Side-look. */
8
+ eyeStyle: number;
9
+ /** Eye iris color index (0–7). Maps to: Chocolate, Sky, Emerald, Hazel, Storm, Amber, Violet, Gray. */
10
+ eyeColor: number;
11
+ /** Eyebrow style (0–7). Maps to: Wispy, Straight, Natural, Arched, Angled, Worried, Bushy, Thin. */
12
+ eyebrows: number;
13
+ /** Nose variant (0–7). Maps to: Shadow, Button, Soft, Nostrils, Pointed, Wide, Bridge, Snub. */
14
+ nose: number;
15
+ /** Mouth expression (0–7). Maps to: Smile, Calm, Happy, Oh, Smirk, Grin, Flat, Pout. */
16
+ mouth: number;
17
+ /** Hair style (0–9). Maps to: Bald, Crew, Curly, Side Part, Long, Buzz, Beanie, Cap, Mohawk, Bun. */
18
+ hairStyle: number;
19
+ /** Hair color index (0–9). Maps to: Black, Espresso, Walnut, Honey, Copper, Silver, Charcoal, Burgundy, Strawberry, Ginger. */
20
+ hairColor: number;
21
+ /** Accessory (0–11). Maps to: None, Beauty Mark, Round Glasses, Rect Glasses, Earring, Headband, Freckles, Stud Earrings, Aviators, Band-Aid, Left Eyebrow Slit, Right Eyebrow Slit. */
22
+ accessory: number;
23
+ /** Background color index (0–11). Maps to: Rose, Olive, Sage, Fern, Mint, Ocean, Sky, Lavender, Orchid, Blush, Lilac, Seafoam. */
24
+ bgColor: number;
25
+ }
26
+ interface SolFaceTheme {
27
+ /** Override the 10 skin tone colors. Default: natural palette from porcelain (#faeae5) to deep brown (#4b2d25). */
28
+ skinColors?: string[];
29
+ /** Override the 8 eye iris colors. Default: chocolate, sky, emerald, hazel, storm, amber, violet, gray. */
30
+ eyeColors?: string[];
31
+ /** Override the 10 hair colors. Default: black through ginger. */
32
+ hairColors?: string[];
33
+ /** Override the 12 background colors. Default: muted earth tones (rose, olive, sage, ..., lilac, seafoam). */
34
+ bgColors?: string[];
35
+ /** Override mouth/lip color for all faces. Default: derived from skin luminance. */
36
+ mouthColor?: string;
37
+ /** Override eyebrow color for all faces. Default: derived from skin luminance. */
38
+ eyebrowColor?: string;
39
+ /** Override accessory accent color. Default: skin-warm neutral derived from skin. */
40
+ accessoryColor?: string;
41
+ /** Override eye white (sclera) color. Default: adapted to skin luminance (#EDE8E0 → #FBF8F2). */
42
+ eyeWhiteColor?: string;
43
+ /** Override nose shadow/fill color. Default: derived from skin luminance. */
44
+ noseColor?: string;
45
+ /** Override glasses frame color. Default: "#4a4a5a". */
46
+ glassesColor?: string;
47
+ /** Override earring color. Default: skin–gold blend. */
48
+ earringColor?: string;
49
+ /** Override headband color. Default: hair–red blend. */
50
+ headbandColor?: string;
51
+ /** Override ear fill color. Default: derived blend of skin highlight and shadow. */
52
+ earColor?: string;
53
+ /** Override eyelid color. Default: derived from skin luminance. */
54
+ lidColor?: string;
55
+ /** Override freckle dot color. Default: "#a0785a". */
56
+ freckleColor?: string;
57
+ /** Override beauty mark color. Default: "#3a2a2a". */
58
+ beautyMarkColor?: string;
59
+ /** Background opacity (0 = transparent, 1 = solid). Default: 1. */
60
+ bgOpacity?: number;
61
+ /** Background corner radius in SVG units (viewBox is 64×64). Default: 4. */
62
+ bgRadius?: number;
63
+ /** Optional border around the avatar. */
64
+ border?: {
65
+ color: string;
66
+ width: number;
67
+ };
68
+ /** Flat rendering — disables all gradients. Default: false. */
69
+ flat?: boolean;
70
+ /** Show cheek blush overlays (full detail only). Default: true. */
71
+ cheekEnabled?: boolean;
72
+ /** Override cheek blush color. Default: derived warm blush from skin. */
73
+ cheekColor?: string;
74
+ /** Cheek blush opacity (0–1). Default: derived from skin luminance (~0.15–0.33). */
75
+ cheekOpacity?: number;
76
+ /** Face skin opacity (0–1). Default: 1. */
77
+ skinOpacity?: number;
78
+ /** Show chin shadow and glow overlays (full detail only). Default: true. */
79
+ shadowEnabled?: boolean;
80
+ /** Face glow highlight intensity (0–1). Default: 0.10. */
81
+ glowIntensity?: number;
82
+ /** Show/hide ears. Default: true. */
83
+ earsEnabled?: boolean;
84
+ /** Show/hide eyebrows. Default: true. */
85
+ eyebrowsEnabled?: boolean;
86
+ /** Show/hide nose. Default: true. */
87
+ noseEnabled?: boolean;
88
+ /** Show/hide accessories (glasses, earrings, headband, etc.). Default: true. */
89
+ accessoriesEnabled?: boolean;
90
+ /** Show/hide hair (front and back). Default: true. */
91
+ hairEnabled?: boolean;
92
+ /** Enable pixel art rendering mode. Default: false. */
93
+ _pixel?: boolean;
94
+ /** Pixel grid resolution (source canvas size). Lower = blockier. Default: 16. */
95
+ _pixelDensity?: number;
96
+ /** Round pixel art corners (12% border-radius). Default: true. */
97
+ _pixelRounded?: boolean;
98
+ /** Show pixel outline border. Default: false. */
99
+ _pixelOutline?: boolean;
100
+ /** Pixel outline color. Default: "#000". */
101
+ _pixelOutlineColor?: string;
102
+ /** Pixel outline width at 64px reference size. Scales proportionally. Default: 1. */
103
+ _pixelOutlineWidth?: number;
104
+ /** CSS contrast filter (1.0 = normal). */
105
+ _pixelContrast?: number;
106
+ /** CSS saturate filter (1.0 = normal). */
107
+ _pixelSaturation?: number;
108
+ /** CSS brightness filter (1.0 = normal). */
109
+ _pixelBrightness?: number;
110
+ /** Show CRT-style scanline overlay. Default: false. */
111
+ _pixelScanlines?: boolean;
112
+ /** Scanline overlay opacity (0–1). Default: 0.08. */
113
+ _pixelScanlineOpacity?: number;
114
+ /** Scanline spacing in px at 64px reference size. Scales proportionally. Default: 2. */
115
+ _pixelScanlineSpacing?: number;
116
+ /** Show pixel grid overlay. Default: false. */
117
+ _pixelGrid?: boolean;
118
+ /** Grid overlay opacity (0–1). Default: 0.06. */
119
+ _pixelGridOpacity?: number;
120
+ /** Grid line color. Default: "#000". */
121
+ _pixelGridColor?: string;
122
+ /** Enable drop shadow on pixel art. Default: false. */
123
+ _pixelShadow?: boolean;
124
+ /** Pixel shadow color. Default: "rgba(0,0,0,0.3)". */
125
+ _pixelShadowColor?: string;
126
+ /** Pixel shadow offset at 64px reference size. Scales proportionally. Default: 2. */
127
+ _pixelShadowOffset?: number;
128
+ /** Enable liquid glass rendering mode. Default: false. */
129
+ _glass?: boolean;
130
+ /** Backdrop blur radius at 64px reference size. Scales proportionally. Default: 12. */
131
+ _blurRadius?: number;
132
+ /** Backdrop saturation multiplier (1.0 = normal). Default: 1.8. */
133
+ _saturate?: number;
134
+ /** Color tint overlay opacity (0–1). Default: 0.12. */
135
+ _tintOpacity?: number;
136
+ /** Color tint overlay color. Default: "rgba(255,255,255,1)". */
137
+ _tintColor?: string;
138
+ /** Glass border opacity (0–1). Default: 0.25. */
139
+ _borderOpacity?: number;
140
+ /** Glass border width at 64px reference size. Scales proportionally. Min 0.5px. Default: 1. */
141
+ _borderWidth?: number;
142
+ /** Glass border color. Default: rgba(255,255,255,{_borderOpacity}). */
143
+ _borderColor?: string;
144
+ /** Specular highlight opacity (0–1). Default: 0.25. */
145
+ _specularOpacity?: number;
146
+ /** Specular highlight color. Default: "rgba(255,255,255,1)". */
147
+ _specularColor?: string;
148
+ /** Specular gradient end position (%). Default: 50. */
149
+ _specularEnd?: number;
150
+ /** Light angle for specular gradient (degrees). Default: 135. */
151
+ _lightAngle?: number;
152
+ /** Inner rim highlight intensity (0–1). Default: 0.08. */
153
+ _rimIntensity?: number;
154
+ /** @deprecated Use _shadowY, _shadowBlur, _shadowOpacity for size-proportional shadows. Raw CSS shadow string — not scaled with size. */
155
+ _shadow?: string;
156
+ /** Shadow Y offset at 64px reference size. Scales proportionally. Default: 8. */
157
+ _shadowY?: number;
158
+ /** Shadow blur radius at 64px reference size. Scales proportionally. Default: 32. */
159
+ _shadowBlur?: number;
160
+ /** Shadow opacity (0–1). Default: 0.12. */
161
+ _shadowOpacity?: number;
162
+ }
163
+ /** Options for rendering a SolFace avatar (shared by string renderer and React component). */
164
+ interface RenderOptions {
165
+ /** Avatar size in CSS pixels (width and height). Default: 64. */
166
+ size?: number;
167
+ /** Theme configuration for colors, layout, and rendering style. */
168
+ theme?: SolFaceTheme;
169
+ /** Override specific trait indices. Merged on top of the deterministic traits. */
170
+ traitOverrides?: Partial<SolFaceTraits>;
171
+ /** Enable blink animation. Pass `true` for defaults, or an object for custom timing. Default: false. */
172
+ enableBlink?: boolean | {
173
+ /** Interval between blinks in seconds. Default: 4. */
174
+ duration?: number;
175
+ /** Initial delay before first blink in seconds. Default: 0. */
176
+ delay?: number;
177
+ };
178
+ /** CSS class name applied to the root SVG element. */
179
+ className?: string;
180
+ /** Detail level. "full" renders all overlays; "simplified" omits gradients and blush; "auto" uses full at size ≥ 48px. Default: "auto". */
181
+ detail?: "full" | "simplified" | "auto";
182
+ /** Per-instance color overrides (hex strings). Takes precedence over theme color settings and derived colors. */
183
+ colorOverrides?: {
184
+ /** Override skin color (hex). */
185
+ skin?: string;
186
+ /** Override eye iris color (hex). */
187
+ eyes?: string;
188
+ /** Override hair color (hex). */
189
+ hair?: string;
190
+ /** Override background color (hex). */
191
+ bg?: string;
192
+ /** Override mouth/lip color (hex). */
193
+ mouth?: string;
194
+ /** Override eyebrow color (hex). */
195
+ eyebrow?: string;
196
+ /** Override accessory accent color (hex). */
197
+ accessory?: string;
198
+ /** Override nose shadow/fill color (hex). */
199
+ nose?: string;
200
+ /** Override eye white (sclera) color (hex). */
201
+ eyeWhite?: string;
202
+ };
203
+ }
204
+ /** Default 10 skin tone hex colors, from porcelain to deep brown. */
205
+ declare const SKIN_COLORS: string[];
206
+ /** Default 8 eye iris hex colors: chocolate, sky, emerald, hazel, storm, amber, violet, gray. */
207
+ declare const EYE_COLORS: string[];
208
+ /** Default 10 hair hex colors: black, espresso, walnut, honey, copper, silver, charcoal, burgundy, strawberry, ginger. */
209
+ declare const HAIR_COLORS: string[];
210
+ /** Default 12 background hex colors: rose, olive, sage, fern, mint, ocean, sky, lavender, orchid, blush, lilac, seafoam. */
211
+ declare const BG_COLORS: string[];
212
+ /**
213
+ * Deterministically generate avatar traits from a wallet address using djb2 + mulberry32 PRNG.
214
+ * The same wallet always produces the same traits (~53M visually unique combinations).
215
+ *
216
+ * @param walletAddress Base58 Solana wallet address.
217
+ * @param overrides Optional partial traits to force specific values.
218
+ * @returns Complete trait set with all 11 indices (10 visual + faceShape for PRNG ordering).
219
+ */
220
+ declare function generateTraits(walletAddress: string, overrides?: Partial<SolFaceTraits>): SolFaceTraits;
221
+ /**
222
+ * Resolve the effective accessory index.
223
+ *
224
+ * @param traits Complete trait set.
225
+ * @returns Effective accessory index (0–11).
226
+ */
227
+ declare function effectiveAccessory(traits: SolFaceTraits): number;
228
+ /**
229
+ * Convert numeric trait indices to human-readable label strings.
230
+ *
231
+ * @param traits Complete trait set.
232
+ * @returns A record mapping each trait name to its display label (e.g. `{ skinColor: "Golden", hairStyle: "Curly" }`).
233
+ */
234
+ declare function getTraitLabels(traits: SolFaceTraits): Record<string, string>;
235
+ /**
236
+ * Compute a short hex hash (8 characters) from a wallet address. Useful as a compact identity fingerprint.
237
+ *
238
+ * @param walletAddress Base58 Solana wallet address.
239
+ * @returns 8-character lowercase hex string.
240
+ */
241
+ declare function traitHash(walletAddress: string): string;
242
+ /**
243
+ * Look up a theme by name from a theme registry.
244
+ *
245
+ * @param themeName Theme name to look up.
246
+ * @param themes Registry of available themes.
247
+ * @returns The matching theme, or `undefined` if not found.
248
+ */
249
+ declare function resolveTheme(themeName?: string, themes?: Record<string, SolFaceTheme>): SolFaceTheme | undefined;
250
+ /**
251
+ * Shallow-merge two themes. Overrides take precedence over the base.
252
+ *
253
+ * @param base Base theme (or null/undefined).
254
+ * @param overrides Theme overrides (or null/undefined).
255
+ * @returns Merged theme, or null if both inputs are nullish.
256
+ */
257
+ declare function mergeTheme(base: SolFaceTheme | null | undefined, overrides: SolFaceTheme | null | undefined): SolFaceTheme | null;
258
+
259
+ export { BG_COLORS as B, EYE_COLORS as E, HAIR_COLORS as H, type RenderOptions as R, SKIN_COLORS as S, type SolFaceTheme as a, type SolFaceTraits as b, getTraitLabels as c, effectiveAccessory as e, generateTraits as g, mergeTheme as m, resolveTheme as r, traitHash as t };
@@ -1,8 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkTYTBYDQU_cjs = require('../chunk-TYTBYDQU.cjs');
4
- var chunkF54WHRCE_cjs = require('../chunk-F54WHRCE.cjs');
5
- var chunk6QRDULAO_cjs = require('../chunk-6QRDULAO.cjs');
3
+ var chunkW2U6ITMR_cjs = require('../chunk-W2U6ITMR.cjs');
4
+ var chunkPCSRDAWQ_cjs = require('../chunk-PCSRDAWQ.cjs');
6
5
 
7
6
  // src/vanilla/index.ts
8
7
  function mountSolFace(element, walletAddress, options) {
@@ -12,7 +11,7 @@ function mountSolFace(element, walletAddress, options) {
12
11
  return () => {
13
12
  };
14
13
  }
15
- el.innerHTML = chunkF54WHRCE_cjs.renderSolFaceSVG(walletAddress, options);
14
+ el.innerHTML = chunkW2U6ITMR_cjs.renderSolFaceSVG(walletAddress, options);
16
15
  return () => {
17
16
  el.innerHTML = "";
18
17
  };
@@ -20,8 +19,8 @@ function mountSolFace(element, walletAddress, options) {
20
19
  function setSolFaceImg(img, walletAddress, options) {
21
20
  const el = typeof img === "string" ? document.querySelector(img) : img;
22
21
  if (!el) return;
23
- el.src = chunkF54WHRCE_cjs.renderSolFaceDataURI(walletAddress, options);
24
- el.alt = chunkTYTBYDQU_cjs.solFaceAltText(walletAddress);
22
+ el.src = chunkW2U6ITMR_cjs.renderSolFaceDataURI(walletAddress, options);
23
+ el.alt = chunkW2U6ITMR_cjs.solFaceAltText(walletAddress);
25
24
  }
26
25
  function autoInit(root = document) {
27
26
  const elements = root.querySelectorAll("[data-solface]");
@@ -33,7 +32,7 @@ function autoInit(root = document) {
33
32
  const themeName = el.getAttribute("data-solface-theme");
34
33
  const flat = el.getAttribute("data-solface-flat") === "true";
35
34
  const detail = el.getAttribute("data-solface-detail");
36
- let theme = themeName && themeName in chunk6QRDULAO_cjs.PRESET_THEMES ? chunk6QRDULAO_cjs.PRESET_THEMES[themeName] : void 0;
35
+ let theme = themeName && themeName in chunkPCSRDAWQ_cjs.PRESET_THEMES ? chunkPCSRDAWQ_cjs.PRESET_THEMES[themeName] : void 0;
37
36
  if (flat && theme) {
38
37
  theme = { ...theme, flat: true };
39
38
  } else if (flat) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/vanilla/index.ts"],"names":["renderSolFaceSVG","renderSolFaceDataURI","solFaceAltText","PRESET_THEMES"],"mappings":";;;;;;;AAUO,SAAS,YAAA,CACd,OAAA,EACA,aAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,KAAK,OAAO,OAAA,KAAY,WAC1B,QAAA,CAAS,aAAA,CAA2B,OAAO,CAAA,GAC3C,OAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAE,CAAA;AACvD,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,EAAA,CAAG,SAAA,GAAYA,kCAAA,CAAiB,aAAA,EAAe,OAAO,CAAA;AACtD,EAAA,OAAO,MAAM;AAAE,IAAA,EAAA,CAAG,SAAA,GAAY,EAAA;AAAA,EAAI,CAAA;AACpC;AAEO,SAAS,aAAA,CACd,GAAA,EACA,aAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,KAAK,OAAO,GAAA,KAAQ,WACtB,QAAA,CAAS,aAAA,CAAgC,GAAG,CAAA,GAC5C,GAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,EAAA,CAAG,GAAA,GAAMC,sCAAA,CAAqB,aAAA,EAAe,OAAO,CAAA;AACpD,EAAA,EAAA,CAAG,GAAA,GAAMC,iCAAe,aAAa,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,OAA+B,QAAA,EAAgB;AACtE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAA8B,gBAAgB,CAAA;AACpE,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAA,KAAO;AACvB,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,cAAc,CAAA;AAC7C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,OAAO,QAAA,CAAS,EAAA,CAAG,aAAa,mBAAmB,CAAA,IAAK,MAAM,EAAE,CAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA,KAAM,MAAA;AACxD,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA;AACtD,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,mBAAmB,CAAA,KAAM,MAAA;AACtD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,qBAAqB,CAAA;AAEpD,IAAA,IAAI,QAAQ,SAAA,IAAa,SAAA,IAAaC,+BAAA,GAClCA,+BAAA,CAAc,SAAuC,CAAA,GACrD,MAAA;AAGJ,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAK;AAAA,IACjC,WAAW,IAAA,EAAM;AACf,MAAA,KAAA,GAAQ,EAAE,MAAM,IAAA,EAAK;AAAA,IACvB;AAEA,IAAA,YAAA,CAAa,IAAI,MAAA,EAAQ;AAAA,MACvB,IAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,KAAA;AAAA,MACA,QAAQ,MAAA,IAAU;AAAA,KACnB,CAAA;AAAA,EACH,CAAC,CAAA;AACH","file":"index.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — Vanilla DOM Helpers\n// Mount avatars directly into DOM elements without React.\n// ═══════════════════════════════════════════════════════════════\n\nimport { renderSolFaceSVG, renderSolFaceDataURI } from \"../core/renderer\";\nimport { solFaceAltText } from \"../core/describe\";\nimport { PRESET_THEMES } from \"../themes/presets\";\nimport type { RenderOptions } from \"../core/traits\";\n\nexport function mountSolFace(\n element: HTMLElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): () => void {\n const el = typeof element === \"string\"\n ? document.querySelector<HTMLElement>(element)\n : element;\n\n if (!el) {\n console.warn(`[SolFaces] Element not found: ${element}`);\n return () => {};\n }\n\n el.innerHTML = renderSolFaceSVG(walletAddress, options);\n return () => { el.innerHTML = \"\"; };\n}\n\nexport function setSolFaceImg(\n img: HTMLImageElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): void {\n const el = typeof img === \"string\"\n ? document.querySelector<HTMLImageElement>(img)\n : img;\n\n if (!el) return;\n el.src = renderSolFaceDataURI(walletAddress, options);\n el.alt = solFaceAltText(walletAddress);\n}\n\nexport function autoInit(root: HTMLElement | Document = document): void {\n const elements = root.querySelectorAll<HTMLElement>(\"[data-solface]\");\n elements.forEach((el) => {\n const wallet = el.getAttribute(\"data-solface\");\n if (!wallet) return;\n\n const size = parseInt(el.getAttribute(\"data-solface-size\") ?? \"64\", 10);\n const blink = el.getAttribute(\"data-solface-blink\") === \"true\";\n const themeName = el.getAttribute(\"data-solface-theme\") as string | null;\n const flat = el.getAttribute(\"data-solface-flat\") === \"true\";\n const detail = el.getAttribute(\"data-solface-detail\") as \"full\" | \"simplified\" | \"auto\" | null;\n\n let theme = themeName && themeName in PRESET_THEMES\n ? PRESET_THEMES[themeName as keyof typeof PRESET_THEMES]\n : undefined;\n\n // data-solface-flat overrides theme flat setting\n if (flat && theme) {\n theme = { ...theme, flat: true };\n } else if (flat) {\n theme = { flat: true };\n }\n\n mountSolFace(el, wallet, {\n size,\n enableBlink: blink,\n theme,\n detail: detail ?? \"auto\",\n });\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/vanilla/index.ts"],"names":["renderSolFaceSVG","renderSolFaceDataURI","solFaceAltText","PRESET_THEMES"],"mappings":";;;;;;AAUO,SAAS,YAAA,CACd,OAAA,EACA,aAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,KAAK,OAAO,OAAA,KAAY,WAC1B,QAAA,CAAS,aAAA,CAA2B,OAAO,CAAA,GAC3C,OAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAE,CAAA;AACvD,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,EAAA,CAAG,SAAA,GAAYA,kCAAA,CAAiB,aAAA,EAAe,OAAO,CAAA;AACtD,EAAA,OAAO,MAAM;AAAE,IAAA,EAAA,CAAG,SAAA,GAAY,EAAA;AAAA,EAAI,CAAA;AACpC;AAEO,SAAS,aAAA,CACd,GAAA,EACA,aAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,KAAK,OAAO,GAAA,KAAQ,WACtB,QAAA,CAAS,aAAA,CAAgC,GAAG,CAAA,GAC5C,GAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,EAAA,CAAG,GAAA,GAAMC,sCAAA,CAAqB,aAAA,EAAe,OAAO,CAAA;AACpD,EAAA,EAAA,CAAG,GAAA,GAAMC,iCAAe,aAAa,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,OAA+B,QAAA,EAAgB;AACtE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAA8B,gBAAgB,CAAA;AACpE,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAA,KAAO;AACvB,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,cAAc,CAAA;AAC7C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,OAAO,QAAA,CAAS,EAAA,CAAG,aAAa,mBAAmB,CAAA,IAAK,MAAM,EAAE,CAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA,KAAM,MAAA;AACxD,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA;AACtD,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,mBAAmB,CAAA,KAAM,MAAA;AACtD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,qBAAqB,CAAA;AAEpD,IAAA,IAAI,QAAQ,SAAA,IAAa,SAAA,IAAaC,+BAAA,GAClCA,+BAAA,CAAc,SAAuC,CAAA,GACrD,MAAA;AAGJ,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAK;AAAA,IACjC,WAAW,IAAA,EAAM;AACf,MAAA,KAAA,GAAQ,EAAE,MAAM,IAAA,EAAK;AAAA,IACvB;AAEA,IAAA,YAAA,CAAa,IAAI,MAAA,EAAQ;AAAA,MACvB,IAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,KAAA;AAAA,MACA,QAAQ,MAAA,IAAU;AAAA,KACnB,CAAA;AAAA,EACH,CAAC,CAAA;AACH","file":"index.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — Vanilla DOM Helpers\n// Mount avatars directly into DOM elements without React.\n// ═══════════════════════════════════════════════════════════════\n\nimport { renderSolFaceSVG, renderSolFaceDataURI } from \"../core/renderer\";\nimport { solFaceAltText } from \"../core/describe\";\nimport { PRESET_THEMES } from \"../themes/presets\";\nimport type { RenderOptions } from \"../core/traits\";\n\nexport function mountSolFace(\n element: HTMLElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): () => void {\n const el = typeof element === \"string\"\n ? document.querySelector<HTMLElement>(element)\n : element;\n\n if (!el) {\n console.warn(`[SolFaces] Element not found: ${element}`);\n return () => {};\n }\n\n el.innerHTML = renderSolFaceSVG(walletAddress, options);\n return () => { el.innerHTML = \"\"; };\n}\n\nexport function setSolFaceImg(\n img: HTMLImageElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): void {\n const el = typeof img === \"string\"\n ? document.querySelector<HTMLImageElement>(img)\n : img;\n\n if (!el) return;\n el.src = renderSolFaceDataURI(walletAddress, options);\n el.alt = solFaceAltText(walletAddress);\n}\n\nexport function autoInit(root: HTMLElement | Document = document): void {\n const elements = root.querySelectorAll<HTMLElement>(\"[data-solface]\");\n elements.forEach((el) => {\n const wallet = el.getAttribute(\"data-solface\");\n if (!wallet) return;\n\n const size = parseInt(el.getAttribute(\"data-solface-size\") ?? \"64\", 10);\n const blink = el.getAttribute(\"data-solface-blink\") === \"true\";\n const themeName = el.getAttribute(\"data-solface-theme\") as string | null;\n const flat = el.getAttribute(\"data-solface-flat\") === \"true\";\n const detail = el.getAttribute(\"data-solface-detail\") as \"full\" | \"simplified\" | \"auto\" | null;\n\n let theme = themeName && themeName in PRESET_THEMES\n ? PRESET_THEMES[themeName as keyof typeof PRESET_THEMES]\n : undefined;\n\n // data-solface-flat overrides theme flat setting\n if (flat && theme) {\n theme = { ...theme, flat: true };\n } else if (flat) {\n theme = { flat: true };\n }\n\n mountSolFace(el, wallet, {\n size,\n enableBlink: blink,\n theme,\n detail: detail ?? \"auto\",\n });\n });\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { R as RenderOptions } from '../traits-sfe7rM9C.cjs';
1
+ import { R as RenderOptions } from '../traits-D4tbtZIr.cjs';
2
2
 
3
3
  declare function mountSolFace(element: HTMLElement | string, walletAddress: string, options?: RenderOptions): () => void;
4
4
  declare function setSolFaceImg(img: HTMLImageElement | string, walletAddress: string, options?: RenderOptions): void;
@@ -1,4 +1,4 @@
1
- import { R as RenderOptions } from '../traits-sfe7rM9C.js';
1
+ import { R as RenderOptions } from '../traits-D4tbtZIr.js';
2
2
 
3
3
  declare function mountSolFace(element: HTMLElement | string, walletAddress: string, options?: RenderOptions): () => void;
4
4
  declare function setSolFaceImg(img: HTMLImageElement | string, walletAddress: string, options?: RenderOptions): void;
@@ -1,6 +1,5 @@
1
- import { solFaceAltText } from '../chunk-CKHLRORB.js';
2
- import { renderSolFaceSVG, renderSolFaceDataURI } from '../chunk-3CE7Q44S.js';
3
- import { PRESET_THEMES } from '../chunk-DRUSCLEF.js';
1
+ import { renderSolFaceSVG, renderSolFaceDataURI, solFaceAltText } from '../chunk-N5GDLCCL.js';
2
+ import { PRESET_THEMES } from '../chunk-MYUSB4LA.js';
4
3
 
5
4
  // src/vanilla/index.ts
6
5
  function mountSolFace(element, walletAddress, options) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/vanilla/index.ts"],"names":[],"mappings":";;;;;AAUO,SAAS,YAAA,CACd,OAAA,EACA,aAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,KAAK,OAAO,OAAA,KAAY,WAC1B,QAAA,CAAS,aAAA,CAA2B,OAAO,CAAA,GAC3C,OAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAE,CAAA;AACvD,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,EAAA,CAAG,SAAA,GAAY,gBAAA,CAAiB,aAAA,EAAe,OAAO,CAAA;AACtD,EAAA,OAAO,MAAM;AAAE,IAAA,EAAA,CAAG,SAAA,GAAY,EAAA;AAAA,EAAI,CAAA;AACpC;AAEO,SAAS,aAAA,CACd,GAAA,EACA,aAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,KAAK,OAAO,GAAA,KAAQ,WACtB,QAAA,CAAS,aAAA,CAAgC,GAAG,CAAA,GAC5C,GAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,EAAA,CAAG,GAAA,GAAM,oBAAA,CAAqB,aAAA,EAAe,OAAO,CAAA;AACpD,EAAA,EAAA,CAAG,GAAA,GAAM,eAAe,aAAa,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,OAA+B,QAAA,EAAgB;AACtE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAA8B,gBAAgB,CAAA;AACpE,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAA,KAAO;AACvB,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,cAAc,CAAA;AAC7C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,OAAO,QAAA,CAAS,EAAA,CAAG,aAAa,mBAAmB,CAAA,IAAK,MAAM,EAAE,CAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA,KAAM,MAAA;AACxD,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA;AACtD,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,mBAAmB,CAAA,KAAM,MAAA;AACtD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,qBAAqB,CAAA;AAEpD,IAAA,IAAI,QAAQ,SAAA,IAAa,SAAA,IAAa,aAAA,GAClC,aAAA,CAAc,SAAuC,CAAA,GACrD,MAAA;AAGJ,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAK;AAAA,IACjC,WAAW,IAAA,EAAM;AACf,MAAA,KAAA,GAAQ,EAAE,MAAM,IAAA,EAAK;AAAA,IACvB;AAEA,IAAA,YAAA,CAAa,IAAI,MAAA,EAAQ;AAAA,MACvB,IAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,KAAA;AAAA,MACA,QAAQ,MAAA,IAAU;AAAA,KACnB,CAAA;AAAA,EACH,CAAC,CAAA;AACH","file":"index.js","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — Vanilla DOM Helpers\n// Mount avatars directly into DOM elements without React.\n// ═══════════════════════════════════════════════════════════════\n\nimport { renderSolFaceSVG, renderSolFaceDataURI } from \"../core/renderer\";\nimport { solFaceAltText } from \"../core/describe\";\nimport { PRESET_THEMES } from \"../themes/presets\";\nimport type { RenderOptions } from \"../core/traits\";\n\nexport function mountSolFace(\n element: HTMLElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): () => void {\n const el = typeof element === \"string\"\n ? document.querySelector<HTMLElement>(element)\n : element;\n\n if (!el) {\n console.warn(`[SolFaces] Element not found: ${element}`);\n return () => {};\n }\n\n el.innerHTML = renderSolFaceSVG(walletAddress, options);\n return () => { el.innerHTML = \"\"; };\n}\n\nexport function setSolFaceImg(\n img: HTMLImageElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): void {\n const el = typeof img === \"string\"\n ? document.querySelector<HTMLImageElement>(img)\n : img;\n\n if (!el) return;\n el.src = renderSolFaceDataURI(walletAddress, options);\n el.alt = solFaceAltText(walletAddress);\n}\n\nexport function autoInit(root: HTMLElement | Document = document): void {\n const elements = root.querySelectorAll<HTMLElement>(\"[data-solface]\");\n elements.forEach((el) => {\n const wallet = el.getAttribute(\"data-solface\");\n if (!wallet) return;\n\n const size = parseInt(el.getAttribute(\"data-solface-size\") ?? \"64\", 10);\n const blink = el.getAttribute(\"data-solface-blink\") === \"true\";\n const themeName = el.getAttribute(\"data-solface-theme\") as string | null;\n const flat = el.getAttribute(\"data-solface-flat\") === \"true\";\n const detail = el.getAttribute(\"data-solface-detail\") as \"full\" | \"simplified\" | \"auto\" | null;\n\n let theme = themeName && themeName in PRESET_THEMES\n ? PRESET_THEMES[themeName as keyof typeof PRESET_THEMES]\n : undefined;\n\n // data-solface-flat overrides theme flat setting\n if (flat && theme) {\n theme = { ...theme, flat: true };\n } else if (flat) {\n theme = { flat: true };\n }\n\n mountSolFace(el, wallet, {\n size,\n enableBlink: blink,\n theme,\n detail: detail ?? \"auto\",\n });\n });\n}\n"]}
1
+ {"version":3,"sources":["../../src/vanilla/index.ts"],"names":[],"mappings":";;;;AAUO,SAAS,YAAA,CACd,OAAA,EACA,aAAA,EACA,OAAA,EACY;AACZ,EAAA,MAAM,KAAK,OAAO,OAAA,KAAY,WAC1B,QAAA,CAAS,aAAA,CAA2B,OAAO,CAAA,GAC3C,OAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACP,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAE,CAAA;AACvD,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,EAAA,CAAG,SAAA,GAAY,gBAAA,CAAiB,aAAA,EAAe,OAAO,CAAA;AACtD,EAAA,OAAO,MAAM;AAAE,IAAA,EAAA,CAAG,SAAA,GAAY,EAAA;AAAA,EAAI,CAAA;AACpC;AAEO,SAAS,aAAA,CACd,GAAA,EACA,aAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,KAAK,OAAO,GAAA,KAAQ,WACtB,QAAA,CAAS,aAAA,CAAgC,GAAG,CAAA,GAC5C,GAAA;AAEJ,EAAA,IAAI,CAAC,EAAA,EAAI;AACT,EAAA,EAAA,CAAG,GAAA,GAAM,oBAAA,CAAqB,aAAA,EAAe,OAAO,CAAA;AACpD,EAAA,EAAA,CAAG,GAAA,GAAM,eAAe,aAAa,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,OAA+B,QAAA,EAAgB;AACtE,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,gBAAA,CAA8B,gBAAgB,CAAA;AACpE,EAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAA,KAAO;AACvB,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,cAAc,CAAA;AAC7C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,OAAO,QAAA,CAAS,EAAA,CAAG,aAAa,mBAAmB,CAAA,IAAK,MAAM,EAAE,CAAA;AACtE,IAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA,KAAM,MAAA;AACxD,IAAA,MAAM,SAAA,GAAY,EAAA,CAAG,YAAA,CAAa,oBAAoB,CAAA;AACtD,IAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,mBAAmB,CAAA,KAAM,MAAA;AACtD,IAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,qBAAqB,CAAA;AAEpD,IAAA,IAAI,QAAQ,SAAA,IAAa,SAAA,IAAa,aAAA,GAClC,aAAA,CAAc,SAAuC,CAAA,GACrD,MAAA;AAGJ,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,IAAA,EAAK;AAAA,IACjC,WAAW,IAAA,EAAM;AACf,MAAA,KAAA,GAAQ,EAAE,MAAM,IAAA,EAAK;AAAA,IACvB;AAEA,IAAA,YAAA,CAAa,IAAI,MAAA,EAAQ;AAAA,MACvB,IAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,KAAA;AAAA,MACA,QAAQ,MAAA,IAAU;AAAA,KACnB,CAAA;AAAA,EACH,CAAC,CAAA;AACH","file":"index.js","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — Vanilla DOM Helpers\n// Mount avatars directly into DOM elements without React.\n// ═══════════════════════════════════════════════════════════════\n\nimport { renderSolFaceSVG, renderSolFaceDataURI } from \"../core/renderer\";\nimport { solFaceAltText } from \"../core/describe\";\nimport { PRESET_THEMES } from \"../themes/presets\";\nimport type { RenderOptions } from \"../core/traits\";\n\nexport function mountSolFace(\n element: HTMLElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): () => void {\n const el = typeof element === \"string\"\n ? document.querySelector<HTMLElement>(element)\n : element;\n\n if (!el) {\n console.warn(`[SolFaces] Element not found: ${element}`);\n return () => {};\n }\n\n el.innerHTML = renderSolFaceSVG(walletAddress, options);\n return () => { el.innerHTML = \"\"; };\n}\n\nexport function setSolFaceImg(\n img: HTMLImageElement | string,\n walletAddress: string,\n options?: RenderOptions,\n): void {\n const el = typeof img === \"string\"\n ? document.querySelector<HTMLImageElement>(img)\n : img;\n\n if (!el) return;\n el.src = renderSolFaceDataURI(walletAddress, options);\n el.alt = solFaceAltText(walletAddress);\n}\n\nexport function autoInit(root: HTMLElement | Document = document): void {\n const elements = root.querySelectorAll<HTMLElement>(\"[data-solface]\");\n elements.forEach((el) => {\n const wallet = el.getAttribute(\"data-solface\");\n if (!wallet) return;\n\n const size = parseInt(el.getAttribute(\"data-solface-size\") ?? \"64\", 10);\n const blink = el.getAttribute(\"data-solface-blink\") === \"true\";\n const themeName = el.getAttribute(\"data-solface-theme\") as string | null;\n const flat = el.getAttribute(\"data-solface-flat\") === \"true\";\n const detail = el.getAttribute(\"data-solface-detail\") as \"full\" | \"simplified\" | \"auto\" | null;\n\n let theme = themeName && themeName in PRESET_THEMES\n ? PRESET_THEMES[themeName as keyof typeof PRESET_THEMES]\n : undefined;\n\n // data-solface-flat overrides theme flat setting\n if (flat && theme) {\n theme = { ...theme, flat: true };\n } else if (flat) {\n theme = { flat: true };\n }\n\n mountSolFace(el, wallet, {\n size,\n enableBlink: blink,\n theme,\n detail: detail ?? \"auto\",\n });\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solfaces",
3
- "version": "2.2.0",
3
+ "version": "2.3.0",
4
4
  "description": "Deterministic wallet avatars and names for the Solana ecosystem. SHA-256 name derivation, zero-dependency trait engine with React, vanilla JS, and server-side rendering support.",
5
5
  "author": "https://github.com/jorger3301",
6
6
  "license": "MIT",
@@ -32,6 +32,9 @@
32
32
  "solnames"
33
33
  ],
34
34
  "type": "module",
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
35
38
  "main": "./dist/index.cjs",
36
39
  "module": "./dist/index.js",
37
40
  "types": "./dist/index.d.ts",