solfaces 2.1.2 → 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.
- package/README.md +61 -35
- package/SKILL.md +4 -5
- package/dist/agent/index.cjs +14 -15
- package/dist/agent/index.js +4 -5
- package/dist/agent/mcp-server.cjs +333 -339
- package/dist/{chunk-5DT27HMT.js → chunk-2KW35VRI.js} +3 -3
- package/dist/{chunk-5DT27HMT.js.map → chunk-2KW35VRI.js.map} +1 -1
- package/dist/{chunk-4YFZ4W2Y.cjs → chunk-BI3GHRKQ.cjs} +22 -23
- package/dist/chunk-BI3GHRKQ.cjs.map +1 -0
- package/dist/{chunk-DRUSCLEF.js → chunk-MYUSB4LA.js} +28 -8
- package/dist/chunk-MYUSB4LA.js.map +1 -0
- package/dist/{chunk-3CE7Q44S.js → chunk-N5GDLCCL.js} +324 -110
- package/dist/chunk-N5GDLCCL.js.map +1 -0
- package/dist/{chunk-66PSL4YO.js → chunk-O2IIBSQH.js} +9 -10
- package/dist/chunk-O2IIBSQH.js.map +1 -0
- package/dist/{chunk-6QRDULAO.cjs → chunk-PCSRDAWQ.cjs} +28 -7
- package/dist/chunk-PCSRDAWQ.cjs.map +1 -0
- package/dist/{chunk-WIXGHS77.cjs → chunk-T7HEUW2O.cjs} +6 -6
- package/dist/{chunk-WIXGHS77.cjs.map → chunk-T7HEUW2O.cjs.map} +1 -1
- package/dist/{chunk-N5DDJ3WQ.js → chunk-UTT764K6.js} +10 -9
- package/dist/{chunk-N5DDJ3WQ.js.map → chunk-UTT764K6.js.map} +1 -1
- package/dist/{chunk-F54WHRCE.cjs → chunk-W2U6ITMR.cjs} +328 -110
- package/dist/chunk-W2U6ITMR.cjs.map +1 -0
- package/dist/{chunk-XXJJH56O.cjs → chunk-YGD7EQEX.cjs} +10 -9
- package/dist/{chunk-XXJJH56O.cjs.map → chunk-YGD7EQEX.cjs.map} +1 -1
- package/dist/core/index.cjs +43 -44
- package/dist/core/index.d.cts +39 -5
- package/dist/core/index.d.ts +39 -5
- package/dist/core/index.js +2 -3
- package/dist/index.cjs +61 -58
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +5 -6
- package/dist/names/index.cjs +9 -9
- package/dist/names/index.d.cts +4 -2
- package/dist/names/index.d.ts +4 -2
- package/dist/names/index.js +1 -1
- package/dist/react/index.cjs +112 -125
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +23 -1
- package/dist/react/index.d.ts +23 -1
- package/dist/react/index.js +96 -109
- package/dist/react/index.js.map +1 -1
- package/dist/solfaces.cdn.global.js +2 -2
- package/dist/solfaces.cdn.global.js.map +1 -1
- package/dist/themes/index.cjs +18 -14
- package/dist/themes/index.d.cts +30 -4
- package/dist/themes/index.d.ts +30 -4
- package/dist/themes/index.js +1 -1
- package/dist/traits-D4tbtZIr.d.cts +259 -0
- package/dist/traits-D4tbtZIr.d.ts +259 -0
- package/dist/vanilla/index.cjs +6 -7
- package/dist/vanilla/index.cjs.map +1 -1
- package/dist/vanilla/index.d.cts +1 -1
- package/dist/vanilla/index.d.ts +1 -1
- package/dist/vanilla/index.js +2 -3
- package/dist/vanilla/index.js.map +1 -1
- package/package.json +4 -1
- package/python/solfaces.py +108 -122
- package/reference/integrations.md +1 -1
- package/dist/chunk-3CE7Q44S.js.map +0 -1
- package/dist/chunk-4YFZ4W2Y.cjs.map +0 -1
- package/dist/chunk-66PSL4YO.js.map +0 -1
- package/dist/chunk-6QRDULAO.cjs.map +0 -1
- package/dist/chunk-CKHLRORB.js +0 -239
- package/dist/chunk-CKHLRORB.js.map +0 -1
- package/dist/chunk-DRUSCLEF.js.map +0 -1
- package/dist/chunk-F54WHRCE.cjs.map +0 -1
- package/dist/chunk-TYTBYDQU.cjs +0 -244
- package/dist/chunk-TYTBYDQU.cjs.map +0 -1
- package/dist/traits-sfe7rM9C.d.cts +0 -106
- package/dist/traits-sfe7rM9C.d.ts +0 -106
package/dist/react/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { generateTraits, SKIN_COLORS, EYE_COLORS, HAIR_COLORS, BG_COLORS, deriveSkinColors, blend, effectiveAccessory, renderSolFaceSVG, lighten, darken
|
|
2
|
-
import { deriveName, deriveIdentity } from '../chunk-
|
|
1
|
+
import { generateTraits, SKIN_COLORS, EYE_COLORS, HAIR_COLORS, BG_COLORS, deriveSkinColors, blend, effectiveAccessory, renderSolFaceSVG, solFaceAltText, lighten, darken } from '../chunk-N5GDLCCL.js';
|
|
2
|
+
import { deriveName, deriveIdentity } from '../chunk-UTT764K6.js';
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
|
|
@@ -10,18 +10,8 @@ function djb2(str) {
|
|
|
10
10
|
}
|
|
11
11
|
return hash >>> 0;
|
|
12
12
|
}
|
|
13
|
-
function HairBack(
|
|
14
|
-
|
|
15
|
-
switch (hi) {
|
|
16
|
-
case 5:
|
|
17
|
-
return /* @__PURE__ */ jsx("rect", { x: "10", y: "14", width: "44", height: "42", rx: "6", fill });
|
|
18
|
-
case 6:
|
|
19
|
-
return /* @__PURE__ */ jsx("rect", { x: "12", y: "14", width: "40", height: "32", rx: "8", fill });
|
|
20
|
-
case 8:
|
|
21
|
-
return /* @__PURE__ */ jsx("rect", { x: "11", y: "14", width: "42", height: "38", rx: "8", fill });
|
|
22
|
-
default:
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
13
|
+
function HairBack(_props) {
|
|
14
|
+
return null;
|
|
25
15
|
}
|
|
26
16
|
function Ears({ earFill, earShadow }) {
|
|
27
17
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -40,55 +30,8 @@ function FaceOverlays({ id }) {
|
|
|
40
30
|
/* @__PURE__ */ jsx("line", { x1: "20", y1: "50", x2: "44", y2: "50", stroke: "currentColor", strokeWidth: "0.3", opacity: "0.08", strokeLinecap: "round" })
|
|
41
31
|
] });
|
|
42
32
|
}
|
|
43
|
-
function HairFront(
|
|
44
|
-
|
|
45
|
-
switch (hi) {
|
|
46
|
-
case 0:
|
|
47
|
-
return null;
|
|
48
|
-
case 1:
|
|
49
|
-
return /* @__PURE__ */ jsx("path", { d: "M14 28 Q14 14 32 12 Q50 14 50 28 L50 22 Q50 12 32 10 Q14 12 14 22 Z", fill });
|
|
50
|
-
case 2:
|
|
51
|
-
return /* @__PURE__ */ jsxs("g", { fill, children: [
|
|
52
|
-
/* @__PURE__ */ jsx("circle", { cx: "20", cy: "14", r: "5" }),
|
|
53
|
-
/* @__PURE__ */ jsx("circle", { cx: "28", cy: "11", r: "5.5" }),
|
|
54
|
-
/* @__PURE__ */ jsx("circle", { cx: "36", cy: "11", r: "5.5" }),
|
|
55
|
-
/* @__PURE__ */ jsx("circle", { cx: "44", cy: "14", r: "5" }),
|
|
56
|
-
/* @__PURE__ */ jsx("circle", { cx: "16", cy: "20", r: "4" }),
|
|
57
|
-
/* @__PURE__ */ jsx("circle", { cx: "48", cy: "20", r: "4" })
|
|
58
|
-
] });
|
|
59
|
-
case 3:
|
|
60
|
-
return /* @__PURE__ */ jsxs("g", { fill, children: [
|
|
61
|
-
/* @__PURE__ */ jsx("path", { d: "M14 26 Q14 12 32 10 Q50 12 50 26 L50 20 Q50 10 32 8 Q14 10 14 20 Z" }),
|
|
62
|
-
/* @__PURE__ */ jsx("path", { d: "M14 20 Q8 16 10 8 Q14 10 20 16 Z" })
|
|
63
|
-
] });
|
|
64
|
-
case 4:
|
|
65
|
-
return /* @__PURE__ */ jsx("ellipse", { cx: "32", cy: "10", rx: "14", ry: "8", fill });
|
|
66
|
-
case 5:
|
|
67
|
-
return /* @__PURE__ */ jsx("path", { d: "M14 28 Q14 12 32 10 Q50 12 50 28 L50 20 Q50 10 32 8 Q14 10 14 20 Z", fill });
|
|
68
|
-
case 6:
|
|
69
|
-
return /* @__PURE__ */ jsxs("g", { fill, children: [
|
|
70
|
-
/* @__PURE__ */ jsx("path", { d: "M14 28 Q14 12 32 10 Q50 12 50 28 L50 20 Q50 10 32 8 Q14 10 14 20 Z" }),
|
|
71
|
-
/* @__PURE__ */ jsx("rect", { x: "10", y: "28", width: "8", height: "14", rx: "4" }),
|
|
72
|
-
/* @__PURE__ */ jsx("rect", { x: "46", y: "28", width: "8", height: "14", rx: "4" })
|
|
73
|
-
] });
|
|
74
|
-
case 7: {
|
|
75
|
-
const bOp = buzzOpacity(hairCol, skin);
|
|
76
|
-
return /* @__PURE__ */ jsx("rect", { x: "15", y: "13", width: "34", height: "16", rx: "10", ry: "8", fill: hairCol, opacity: bOp });
|
|
77
|
-
}
|
|
78
|
-
case 8:
|
|
79
|
-
return /* @__PURE__ */ jsxs("g", { children: [
|
|
80
|
-
/* @__PURE__ */ jsx("path", { d: "M14 28 Q14 12 32 10 Q50 12 50 28 L50 20 Q50 10 32 8 Q14 10 14 20 Z", fill }),
|
|
81
|
-
/* @__PURE__ */ jsx("path", { d: "M12 30 Q10 20 14 16", fill: "none", stroke: fill, strokeWidth: "4", strokeLinecap: "round" }),
|
|
82
|
-
/* @__PURE__ */ jsx("path", { d: "M52 30 Q54 20 50 16", fill: "none", stroke: fill, strokeWidth: "4", strokeLinecap: "round" })
|
|
83
|
-
] });
|
|
84
|
-
case 9:
|
|
85
|
-
return /* @__PURE__ */ jsxs("g", { fill, children: [
|
|
86
|
-
/* @__PURE__ */ jsx("path", { d: "M14 28 Q14 14 32 12 Q50 14 50 28 L50 22 Q50 12 32 10 Q14 12 14 22 Z" }),
|
|
87
|
-
/* @__PURE__ */ jsx("ellipse", { cx: "32", cy: "6", rx: "6", ry: "5" })
|
|
88
|
-
] });
|
|
89
|
-
default:
|
|
90
|
-
return null;
|
|
91
|
-
}
|
|
33
|
+
function HairFront(_props) {
|
|
34
|
+
return null;
|
|
92
35
|
}
|
|
93
36
|
function Eyes({ ei, eyeCol, eyeWhite, lidColor, full }) {
|
|
94
37
|
const lx = 25, rx = 39, y = 33;
|
|
@@ -109,8 +52,10 @@ function Eyes({ ei, eyeCol, eyeWhite, lidColor, full }) {
|
|
|
109
52
|
] });
|
|
110
53
|
case 1:
|
|
111
54
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
112
|
-
/* @__PURE__ */ jsx("circle", { cx: lx, cy: y, r: "2", fill: eyeCol }),
|
|
113
|
-
/* @__PURE__ */ jsx("circle", { cx:
|
|
55
|
+
/* @__PURE__ */ jsx("circle", { cx: lx, cy: y, r: "2.2", fill: eyeCol }),
|
|
56
|
+
full && /* @__PURE__ */ jsx("circle", { cx: lx + 0.5, cy: y - 0.5, r: "0.5", fill: "white", opacity: "0.4" }),
|
|
57
|
+
/* @__PURE__ */ jsx("circle", { cx: rx, cy: y, r: "2.2", fill: eyeCol }),
|
|
58
|
+
full && /* @__PURE__ */ jsx("circle", { cx: rx + 0.5, cy: y - 0.5, r: "0.5", fill: "white", opacity: "0.4" })
|
|
114
59
|
] });
|
|
115
60
|
case 2:
|
|
116
61
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -144,25 +89,17 @@ function Eyes({ ei, eyeCol, eyeWhite, lidColor, full }) {
|
|
|
144
89
|
] });
|
|
145
90
|
case 5:
|
|
146
91
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
147
|
-
/* @__PURE__ */ jsx("path", { d: `M${lx - 4} ${y} Q${lx} ${y + 4} ${lx + 4} ${y}`, fill: "none", stroke: eyeCol, strokeWidth: "
|
|
148
|
-
/* @__PURE__ */ jsx("path", { d: `M${rx - 4} ${y} Q${rx} ${y + 4} ${rx + 4} ${y}`, fill: "none", stroke: eyeCol, strokeWidth: "
|
|
92
|
+
/* @__PURE__ */ jsx("path", { d: `M${lx - 4} ${y} Q${lx} ${y + 4.5} ${lx + 4} ${y}`, fill: "none", stroke: eyeCol, strokeWidth: "2", strokeLinecap: "round" }),
|
|
93
|
+
/* @__PURE__ */ jsx("path", { d: `M${rx - 4} ${y} Q${rx} ${y + 4.5} ${rx + 4} ${y}`, fill: "none", stroke: eyeCol, strokeWidth: "2", strokeLinecap: "round" })
|
|
149
94
|
] });
|
|
150
95
|
case 6:
|
|
151
96
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
152
97
|
/* @__PURE__ */ jsx("circle", { cx: lx, cy: y, r: "3.5", fill: eyeWhite }),
|
|
153
98
|
/* @__PURE__ */ jsx("circle", { cx: lx + 0.5, cy: y, r: "2", fill: eyeCol }),
|
|
154
99
|
/* @__PURE__ */ jsx("circle", { cx: lx + 1.5, cy: y - 1, r: "1", fill: "white", opacity: "0.9" }),
|
|
155
|
-
full && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
156
|
-
/* @__PURE__ */ jsx("line", { x1: lx + 2.5, y1: y - 3.5, x2: lx + 4, y2: y - 5, stroke: eyeCol, strokeWidth: "0.8", strokeLinecap: "round" }),
|
|
157
|
-
/* @__PURE__ */ jsx("line", { x1: lx + 3.5, y1: y - 2.5, x2: lx + 5, y2: y - 3.5, stroke: eyeCol, strokeWidth: "0.8", strokeLinecap: "round" })
|
|
158
|
-
] }),
|
|
159
100
|
/* @__PURE__ */ jsx("circle", { cx: rx, cy: y, r: "3.5", fill: eyeWhite }),
|
|
160
101
|
/* @__PURE__ */ jsx("circle", { cx: rx + 0.5, cy: y, r: "2", fill: eyeCol }),
|
|
161
102
|
/* @__PURE__ */ jsx("circle", { cx: rx + 1.5, cy: y - 1, r: "1", fill: "white", opacity: "0.9" }),
|
|
162
|
-
full && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
163
|
-
/* @__PURE__ */ jsx("line", { x1: rx + 2.5, y1: y - 3.5, x2: rx + 4, y2: y - 5, stroke: eyeCol, strokeWidth: "0.8", strokeLinecap: "round" }),
|
|
164
|
-
/* @__PURE__ */ jsx("line", { x1: rx + 3.5, y1: y - 2.5, x2: rx + 5, y2: y - 3.5, stroke: eyeCol, strokeWidth: "0.8", strokeLinecap: "round" })
|
|
165
|
-
] }),
|
|
166
103
|
lids
|
|
167
104
|
] });
|
|
168
105
|
case 7:
|
|
@@ -173,6 +110,16 @@ function Eyes({ ei, eyeCol, eyeWhite, lidColor, full }) {
|
|
|
173
110
|
/* @__PURE__ */ jsx("ellipse", { cx: rx + 0.5, cy: y, rx: "2.2", ry: "1.2", fill: eyeCol }),
|
|
174
111
|
lids
|
|
175
112
|
] });
|
|
113
|
+
case 8:
|
|
114
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
115
|
+
/* @__PURE__ */ jsx("circle", { cx: lx, cy: y, r: "3.5", fill: eyeWhite }),
|
|
116
|
+
/* @__PURE__ */ jsx("circle", { cx: lx - 1, cy: y, r: "2", fill: eyeCol }),
|
|
117
|
+
full && /* @__PURE__ */ jsx("circle", { cx: lx - 0.3, cy: y - 0.8, r: "0.7", fill: "white", opacity: "0.8" }),
|
|
118
|
+
/* @__PURE__ */ jsx("circle", { cx: rx, cy: y, r: "3.5", fill: eyeWhite }),
|
|
119
|
+
/* @__PURE__ */ jsx("circle", { cx: rx - 1, cy: y, r: "2", fill: eyeCol }),
|
|
120
|
+
full && /* @__PURE__ */ jsx("circle", { cx: rx - 0.3, cy: y - 0.8, r: "0.7", fill: "white", opacity: "0.8" }),
|
|
121
|
+
lids
|
|
122
|
+
] });
|
|
176
123
|
default:
|
|
177
124
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
178
125
|
/* @__PURE__ */ jsx("circle", { cx: lx, cy: y, r: "3.5", fill: eyeWhite }),
|
|
@@ -183,7 +130,7 @@ function Eyes({ ei, eyeCol, eyeWhite, lidColor, full }) {
|
|
|
183
130
|
] });
|
|
184
131
|
}
|
|
185
132
|
}
|
|
186
|
-
function Eyebrows({ bi, browColor }) {
|
|
133
|
+
function Eyebrows({ bi, browColor, full = true }) {
|
|
187
134
|
const lx = 25, rx = 39, y = 27;
|
|
188
135
|
switch (bi) {
|
|
189
136
|
case 0:
|
|
@@ -211,6 +158,23 @@ function Eyebrows({ bi, browColor }) {
|
|
|
211
158
|
/* @__PURE__ */ jsx("polyline", { points: `${lx - 3},${y + 1} ${lx},${y - 2} ${lx + 3},${y}`, fill: "none", stroke: browColor, strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" }),
|
|
212
159
|
/* @__PURE__ */ jsx("polyline", { points: `${rx - 3},${y} ${rx},${y - 2} ${rx + 3},${y + 1}`, fill: "none", stroke: browColor, strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" })
|
|
213
160
|
] });
|
|
161
|
+
case 5:
|
|
162
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
163
|
+
/* @__PURE__ */ jsx("line", { x1: lx - 3, y1: y - 1, x2: lx + 3, y2: y + 1, stroke: browColor, strokeWidth: "1.1", strokeLinecap: "round" }),
|
|
164
|
+
/* @__PURE__ */ jsx("line", { x1: rx - 3, y1: y + 1, x2: rx + 3, y2: y - 1, stroke: browColor, strokeWidth: "1.1", strokeLinecap: "round" })
|
|
165
|
+
] });
|
|
166
|
+
case 6: {
|
|
167
|
+
const bw = full ? "2.0" : "1.5";
|
|
168
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
169
|
+
/* @__PURE__ */ jsx("path", { d: `M${lx - 4} ${y + 0.5} Q${lx} ${y - 2} ${lx + 4} ${y + 0.5}`, fill: "none", stroke: browColor, strokeWidth: bw, strokeLinecap: "round" }),
|
|
170
|
+
/* @__PURE__ */ jsx("path", { d: `M${rx - 4} ${y + 0.5} Q${rx} ${y - 2} ${rx + 4} ${y + 0.5}`, fill: "none", stroke: browColor, strokeWidth: bw, strokeLinecap: "round" })
|
|
171
|
+
] });
|
|
172
|
+
}
|
|
173
|
+
case 7:
|
|
174
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
175
|
+
/* @__PURE__ */ jsx("path", { d: `M${lx - 3.5} ${y} Q${lx} ${y - 1.5} ${lx + 3.5} ${y}`, fill: "none", stroke: browColor, strokeWidth: "0.5", strokeLinecap: "round" }),
|
|
176
|
+
/* @__PURE__ */ jsx("path", { d: `M${rx - 3.5} ${y} Q${rx} ${y - 1.5} ${rx + 3.5} ${y}`, fill: "none", stroke: browColor, strokeWidth: "0.5", strokeLinecap: "round" })
|
|
177
|
+
] });
|
|
214
178
|
default:
|
|
215
179
|
return null;
|
|
216
180
|
}
|
|
@@ -229,6 +193,17 @@ function Nose({ ni, noseFill }) {
|
|
|
229
193
|
/* @__PURE__ */ jsx("circle", { cx: cx - 1.8, cy: y, r: "1.2", fill: noseFill, opacity: "0.4" }),
|
|
230
194
|
/* @__PURE__ */ jsx("circle", { cx: cx + 1.8, cy: y, r: "1.2", fill: noseFill, opacity: "0.4" })
|
|
231
195
|
] });
|
|
196
|
+
case 4:
|
|
197
|
+
return /* @__PURE__ */ jsx("path", { d: `M${cx} ${y - 2} L${cx - 2} ${y + 1.5} L${cx + 2} ${y + 1.5} Z`, fill: noseFill, opacity: "0.4" });
|
|
198
|
+
case 5:
|
|
199
|
+
return /* @__PURE__ */ jsx("ellipse", { cx, cy: y, rx: "3.5", ry: "1.5", fill: noseFill, opacity: "0.35" });
|
|
200
|
+
case 6:
|
|
201
|
+
return /* @__PURE__ */ jsx("line", { x1: cx, y1: y - 3, x2: cx, y2: y + 1, stroke: noseFill, strokeWidth: "1.2", strokeLinecap: "round", opacity: "0.4" });
|
|
202
|
+
case 7:
|
|
203
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
204
|
+
/* @__PURE__ */ jsx("circle", { cx, cy: y + 0.5, r: "2", fill: noseFill, opacity: "0.35" }),
|
|
205
|
+
/* @__PURE__ */ jsx("ellipse", { cx, cy: y - 0.5, rx: "1", ry: "0.5", fill: noseFill, opacity: "0.15" })
|
|
206
|
+
] });
|
|
232
207
|
default:
|
|
233
208
|
return /* @__PURE__ */ jsx("ellipse", { cx, cy: y, rx: "2", ry: "1.2", fill: noseFill, opacity: "0.35" });
|
|
234
209
|
}
|
|
@@ -253,7 +228,7 @@ function Mouth({ mi, lipColor, isDark }) {
|
|
|
253
228
|
/* @__PURE__ */ jsx("line", { x1: cx - 4, y1: y + 1.5, x2: cx + 4, y2: y + 1.5, stroke: lipColor, strokeWidth: "0.3", opacity: "0.3" })
|
|
254
229
|
] });
|
|
255
230
|
case 6:
|
|
256
|
-
return /* @__PURE__ */ jsx("
|
|
231
|
+
return /* @__PURE__ */ jsx("path", { d: `M${cx - 4} ${y + 0.5} Q${cx} ${y + 1.5} ${cx + 4} ${y + 0.5}`, fill: "none", stroke: lipColor, strokeWidth: "1.4", strokeLinecap: "round" });
|
|
257
232
|
case 7:
|
|
258
233
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
259
234
|
/* @__PURE__ */ jsx("ellipse", { cx, cy: y + 1, rx: "3.5", ry: "2", fill: lipColor, opacity: "0.25" }),
|
|
@@ -263,12 +238,12 @@ function Mouth({ mi, lipColor, isDark }) {
|
|
|
263
238
|
return /* @__PURE__ */ jsx("path", { d: `M${cx - 4} ${y} Q${cx} ${y + 4} ${cx + 4} ${y}`, fill: "none", stroke: lipColor, strokeWidth: "1.4", strokeLinecap: "round" });
|
|
264
239
|
}
|
|
265
240
|
}
|
|
266
|
-
function Accessory({ ai, glassesColor, earringColor, headbandColor }) {
|
|
241
|
+
function Accessory({ ai, accessoryColor, glassesColor, earringColor, headbandColor, beautyMarkColor = "#3a2a2a", freckleColor = "#a0785a", skinColor = "#E8BA8B" }) {
|
|
267
242
|
switch (ai) {
|
|
268
243
|
case 0:
|
|
269
244
|
return null;
|
|
270
245
|
case 1:
|
|
271
|
-
return /* @__PURE__ */ jsx("circle", { cx: "40", cy: "44", r: "0.8", fill:
|
|
246
|
+
return /* @__PURE__ */ jsx("circle", { cx: "40", cy: "44", r: "0.8", fill: beautyMarkColor });
|
|
272
247
|
case 2:
|
|
273
248
|
return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: glassesColor, strokeWidth: "1", children: [
|
|
274
249
|
/* @__PURE__ */ jsx("circle", { cx: "25", cy: "33", r: "5.5" }),
|
|
@@ -293,7 +268,7 @@ function Accessory({ ai, glassesColor, earringColor, headbandColor }) {
|
|
|
293
268
|
case 5:
|
|
294
269
|
return /* @__PURE__ */ jsx("rect", { x: "13", y: "20", width: "38", height: "3.5", rx: "1.5", fill: headbandColor, opacity: "0.85" });
|
|
295
270
|
case 6:
|
|
296
|
-
return /* @__PURE__ */ jsxs("g", { fill:
|
|
271
|
+
return /* @__PURE__ */ jsxs("g", { fill: freckleColor, opacity: "0.35", children: [
|
|
297
272
|
/* @__PURE__ */ jsx("circle", { cx: "21", cy: "40", r: "0.6" }),
|
|
298
273
|
/* @__PURE__ */ jsx("circle", { cx: "23", cy: "42", r: "0.5" }),
|
|
299
274
|
/* @__PURE__ */ jsx("circle", { cx: "19", cy: "41.5", r: "0.5" }),
|
|
@@ -316,30 +291,34 @@ function Accessory({ ai, glassesColor, earringColor, headbandColor }) {
|
|
|
316
291
|
] });
|
|
317
292
|
case 9:
|
|
318
293
|
return /* @__PURE__ */ jsxs("g", { children: [
|
|
319
|
-
/* @__PURE__ */ jsx("rect", { x: "38", y: "38", width: "
|
|
320
|
-
/* @__PURE__ */ jsx("
|
|
321
|
-
/* @__PURE__ */ jsx("
|
|
322
|
-
/* @__PURE__ */ jsx("line", { x1: "44", y1: "39", x2: "44", y2: "41", stroke: "#c0a080", strokeWidth: "0.4", transform: "rotate(-15 42 40)" })
|
|
294
|
+
/* @__PURE__ */ jsx("rect", { x: "38", y: "38", width: "9", height: "4.5", rx: "1.2", fill: "#f0d0a0", transform: "rotate(-15 42 40)" }),
|
|
295
|
+
/* @__PURE__ */ jsx("rect", { x: "39.5", y: "38.5", width: "6", height: "3.5", rx: "0.8", fill: "#f5ddb5", transform: "rotate(-15 42 40)" }),
|
|
296
|
+
/* @__PURE__ */ jsx("circle", { cx: "42.5", cy: "40.25", r: "0.5", fill: "#d4b898", transform: "rotate(-15 42 40)" })
|
|
323
297
|
] });
|
|
298
|
+
case 10:
|
|
299
|
+
return /* @__PURE__ */ jsx("line", { x1: "23", y1: "24.8", x2: "23.8", y2: "29.2", stroke: skinColor, strokeWidth: "1.3", strokeLinecap: "butt" });
|
|
300
|
+
case 11:
|
|
301
|
+
return /* @__PURE__ */ jsx("line", { x1: "41", y1: "24.8", x2: "40.2", y2: "29.2", stroke: skinColor, strokeWidth: "1.3", strokeLinecap: "butt" });
|
|
324
302
|
default:
|
|
325
303
|
return null;
|
|
326
304
|
}
|
|
327
305
|
}
|
|
328
|
-
function PixelWrapper({ svgString, size, theme }) {
|
|
306
|
+
function PixelWrapper({ svgString, size, theme, alt = "" }) {
|
|
307
|
+
const scale = size / 64;
|
|
329
308
|
const density = theme._pixelDensity ?? 16;
|
|
330
309
|
const rounded = theme._pixelRounded ?? true;
|
|
331
310
|
const outline = theme._pixelOutline ?? false;
|
|
332
311
|
const outlineColor = theme._pixelOutlineColor ?? "#000";
|
|
333
|
-
const outlineWidth = theme._pixelOutlineWidth ?? 1;
|
|
312
|
+
const outlineWidth = Math.max(1, Math.round((theme._pixelOutlineWidth ?? 1) * scale));
|
|
334
313
|
const scanlines = theme._pixelScanlines ?? false;
|
|
335
314
|
const scanlineOpacity = theme._pixelScanlineOpacity ?? 0.08;
|
|
336
|
-
const scanlineSpacing = theme._pixelScanlineSpacing ?? 2;
|
|
315
|
+
const scanlineSpacing = Math.max(1, Math.round((theme._pixelScanlineSpacing ?? 2) * scale));
|
|
337
316
|
const grid = theme._pixelGrid ?? false;
|
|
338
317
|
const gridOpacity = theme._pixelGridOpacity ?? 0.06;
|
|
339
318
|
const gridColor = theme._pixelGridColor ?? "#000";
|
|
340
319
|
const shadow = theme._pixelShadow ?? false;
|
|
341
320
|
const shadowColor = theme._pixelShadowColor ?? "rgba(0,0,0,0.3)";
|
|
342
|
-
const shadowOffset = theme._pixelShadowOffset ?? 2;
|
|
321
|
+
const shadowOffset = Math.max(1, Math.round((theme._pixelShadowOffset ?? 2) * scale));
|
|
343
322
|
const contrast = theme._pixelContrast;
|
|
344
323
|
const saturation = theme._pixelSaturation;
|
|
345
324
|
const brightness = theme._pixelBrightness;
|
|
@@ -365,7 +344,7 @@ function PixelWrapper({ svgString, size, theme }) {
|
|
|
365
344
|
border: outline ? `${outlineWidth}px solid ${outlineColor}` : "none"
|
|
366
345
|
};
|
|
367
346
|
return /* @__PURE__ */ jsxs("div", { style: containerStyle, children: [
|
|
368
|
-
/* @__PURE__ */ jsx("img", { src: dataUri, width: density, height: density, style: imgStyle, alt
|
|
347
|
+
/* @__PURE__ */ jsx("img", { src: dataUri, width: density, height: density, style: imgStyle, alt }),
|
|
369
348
|
scanlines && /* @__PURE__ */ jsx("div", { style: {
|
|
370
349
|
position: "absolute",
|
|
371
350
|
inset: 0,
|
|
@@ -384,20 +363,24 @@ function PixelWrapper({ svgString, size, theme }) {
|
|
|
384
363
|
] });
|
|
385
364
|
}
|
|
386
365
|
function GlassWrapper({ children, size, theme }) {
|
|
387
|
-
const
|
|
366
|
+
const scale = size / 64;
|
|
367
|
+
const blurRadius = (theme._blurRadius ?? 12) * scale;
|
|
388
368
|
const saturate = theme._saturate ?? 1.8;
|
|
389
369
|
const tintOpacity = theme._tintOpacity ?? 0.12;
|
|
390
370
|
const tintColor = theme._tintColor ?? "rgba(255,255,255,1)";
|
|
391
371
|
const borderOpacity = theme._borderOpacity ?? 0.25;
|
|
392
|
-
const borderWidth = theme._borderWidth ?? 1;
|
|
372
|
+
const borderWidth = Math.max(0.5, (theme._borderWidth ?? 1) * scale);
|
|
393
373
|
const borderColor = theme._borderColor ?? `rgba(255,255,255,${borderOpacity})`;
|
|
394
374
|
const specularOpacity = theme._specularOpacity ?? 0.25;
|
|
395
375
|
const specularColor = theme._specularColor ?? "rgba(255,255,255,1)";
|
|
396
376
|
const specularEnd = theme._specularEnd ?? 50;
|
|
397
377
|
const lightAngle = theme._lightAngle ?? 135;
|
|
398
378
|
const rimIntensity = theme._rimIntensity ?? 0.08;
|
|
399
|
-
const
|
|
400
|
-
const
|
|
379
|
+
const shadowY = Math.round((theme._shadowY ?? 8) * scale);
|
|
380
|
+
const shadowBlurR = Math.round((theme._shadowBlur ?? 32) * scale);
|
|
381
|
+
const shadowOpacity = theme._shadowOpacity ?? 0.12;
|
|
382
|
+
const shadowStr = theme._shadow ?? `0 ${shadowY}px ${shadowBlurR}px rgba(0,0,0,${shadowOpacity})`;
|
|
383
|
+
const bgRadius = (theme.bgRadius ?? 16) * scale;
|
|
401
384
|
const containerStyle = {
|
|
402
385
|
position: "relative",
|
|
403
386
|
width: size,
|
|
@@ -476,6 +459,11 @@ function SolFace({
|
|
|
476
459
|
const glassesColor = theme?.glassesColor ?? "#4a4a5a";
|
|
477
460
|
const earringColor = theme?.earringColor ?? blend(skin, "#d4a840", 0.4);
|
|
478
461
|
const headbandColor = theme?.headbandColor ?? blend(hairCol, "#c04040", 0.5);
|
|
462
|
+
const accColor = colorOverrides?.accessory ?? theme?.accessoryColor ?? derived.accessoryColor;
|
|
463
|
+
const earFillFinal = theme?.earColor ?? derived.earFill;
|
|
464
|
+
const lidFinal = theme?.lidColor ?? derived.lidColor;
|
|
465
|
+
const beautyMarkColor = theme?.beautyMarkColor ?? "#3a2a2a";
|
|
466
|
+
const freckleColor = theme?.freckleColor ?? "#a0785a";
|
|
479
467
|
const id = useMemo(() => "sf" + djb2(walletAddress).toString(36), [walletAddress]);
|
|
480
468
|
const cheekEnabled = theme?.cheekEnabled ?? true;
|
|
481
469
|
const cheekColor = theme?.cheekColor ?? derived.cheekColor;
|
|
@@ -496,7 +484,7 @@ function SolFace({
|
|
|
496
484
|
colorOverrides,
|
|
497
485
|
detail: detailProp
|
|
498
486
|
});
|
|
499
|
-
return /* @__PURE__ */ jsx(PixelWrapper, { svgString: pixelSvg, size, theme });
|
|
487
|
+
return /* @__PURE__ */ jsx(PixelWrapper, { svgString: pixelSvg, size, theme, alt: solFaceAltText(walletAddress) });
|
|
500
488
|
}
|
|
501
489
|
const svgElement = /* @__PURE__ */ jsxs(
|
|
502
490
|
"svg",
|
|
@@ -507,24 +495,23 @@ function SolFace({
|
|
|
507
495
|
height: size,
|
|
508
496
|
className,
|
|
509
497
|
style: { display: "block", ...style },
|
|
498
|
+
role: "img",
|
|
499
|
+
"aria-label": solFaceAltText(walletAddress),
|
|
510
500
|
...rest,
|
|
511
501
|
children: [
|
|
512
502
|
!flat && /* @__PURE__ */ jsxs("defs", { children: [
|
|
513
503
|
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}sg`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
514
504
|
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: derived.skinHi }),
|
|
505
|
+
/* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: skin }),
|
|
515
506
|
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: derived.skinLo })
|
|
516
507
|
] }),
|
|
517
|
-
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}hg`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
518
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: lighten(hairCol, 0.15) }),
|
|
519
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: darken(hairCol, 0.15) })
|
|
520
|
-
] }),
|
|
521
508
|
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}bg`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
|
|
522
509
|
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: lighten(bgCol, 0.12) }),
|
|
523
510
|
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: darken(bgCol, 0.12) })
|
|
524
511
|
] }),
|
|
525
512
|
full && cheekEnabled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
526
513
|
/* @__PURE__ */ jsxs("radialGradient", { id: `${id}glow`, cx: "0.5", cy: "0.28", r: "0.45", children: [
|
|
527
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "#ffffff", stopOpacity: 0.1 }),
|
|
514
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "#ffffff", stopOpacity: theme?.glowIntensity ?? 0.1 }),
|
|
528
515
|
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "#ffffff", stopOpacity: 0 })
|
|
529
516
|
] }),
|
|
530
517
|
/* @__PURE__ */ jsxs("radialGradient", { id: `${id}chin`, cx: "0.5", cy: "0.85", r: "0.35", children: [
|
|
@@ -552,17 +539,17 @@ function SolFace({
|
|
|
552
539
|
}
|
|
553
540
|
` }),
|
|
554
541
|
/* @__PURE__ */ jsx("rect", { x: "0", y: "0", width: "64", height: "64", fill: bgFill, opacity: bgOpacity, rx: bgRadius }),
|
|
555
|
-
/* @__PURE__ */ jsx(HairBack, { hi, id, flat }),
|
|
556
|
-
/* @__PURE__ */ jsx(Ears, { earFill:
|
|
557
|
-
/* @__PURE__ */ jsx("rect", { x: "14", y: "16", width: "36", height: "38", rx: "12", ry: "12", fill: skinFill }),
|
|
558
|
-
full && cheekEnabled && !flat && /* @__PURE__ */ jsx(FaceOverlays, { id }),
|
|
559
|
-
|
|
560
|
-
/* @__PURE__ */ jsx(
|
|
561
|
-
/* @__PURE__ */ jsx("g", { className: blinkEnabled ? `${id}-eyes` : void 0, children: /* @__PURE__ */ jsx(Eyes, { ei: traits.eyeStyle %
|
|
562
|
-
/* @__PURE__ */ jsx(Eyebrows, { bi: traits.eyebrows %
|
|
563
|
-
/* @__PURE__ */ jsx(Nose, { ni: traits.nose %
|
|
542
|
+
theme?.hairEnabled !== false && /* @__PURE__ */ jsx(HairBack, { hi, id, flat }),
|
|
543
|
+
theme?.earsEnabled !== false && /* @__PURE__ */ jsx(Ears, { earFill: earFillFinal, earShadow: derived.earShadow }),
|
|
544
|
+
/* @__PURE__ */ jsx("rect", { x: "14", y: "16", width: "36", height: "38", rx: "12", ry: "12", fill: skinFill, opacity: theme?.skinOpacity ?? 1 }),
|
|
545
|
+
full && cheekEnabled && !flat && (theme?.shadowEnabled ?? true) && /* @__PURE__ */ jsx(FaceOverlays, { id }),
|
|
546
|
+
theme?.hairEnabled !== false && /* @__PURE__ */ jsx(HairFront, { hi, id, hairCol, flat }),
|
|
547
|
+
ai === 5 && theme?.accessoriesEnabled !== false && /* @__PURE__ */ jsx(Accessory, { ai: 5, accessoryColor: accColor, glassesColor, earringColor, headbandColor, beautyMarkColor, freckleColor, skinColor: skin }),
|
|
548
|
+
/* @__PURE__ */ jsx("g", { className: blinkEnabled ? `${id}-eyes` : void 0, children: /* @__PURE__ */ jsx(Eyes, { ei: traits.eyeStyle % 9, eyeCol, eyeWhite, lidColor: lidFinal, full }) }),
|
|
549
|
+
theme?.eyebrowsEnabled !== false && /* @__PURE__ */ jsx(Eyebrows, { bi: traits.eyebrows % 8, browColor, full }),
|
|
550
|
+
theme?.noseEnabled !== false && /* @__PURE__ */ jsx(Nose, { ni: traits.nose % 8, noseFill }),
|
|
564
551
|
/* @__PURE__ */ jsx(Mouth, { mi: traits.mouth % 8, lipColor, isDark: derived.isDark }),
|
|
565
|
-
ai !== 0 && ai !== 5 && /* @__PURE__ */ jsx(Accessory, { ai, glassesColor, earringColor, headbandColor }),
|
|
552
|
+
ai !== 0 && ai !== 5 && theme?.accessoriesEnabled !== false && /* @__PURE__ */ jsx(Accessory, { ai, accessoryColor: accColor, glassesColor, earringColor, headbandColor, beautyMarkColor, freckleColor, skinColor: skin }),
|
|
566
553
|
theme?.border && /* @__PURE__ */ jsx("rect", { x: "0", y: "0", width: "64", height: "64", fill: "none", stroke: theme.border.color, strokeWidth: theme.border.width, rx: bgRadius })
|
|
567
554
|
]
|
|
568
555
|
}
|