solfaces 2.2.0 → 2.3.1

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