solfaces 1.0.2 → 2.1.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 (85) hide show
  1. package/README.md +489 -97
  2. package/SKILL.md +171 -0
  3. package/dist/agent/index.cjs +15 -14
  4. package/dist/agent/index.js +5 -4
  5. package/dist/agent/mcp-server.cjs +2956 -287
  6. package/dist/chunk-6QRDULAO.cjs +191 -0
  7. package/dist/chunk-6QRDULAO.cjs.map +1 -0
  8. package/dist/{chunk-RX6D5FGH.js → chunk-77SPWQU5.js} +69 -28
  9. package/dist/chunk-77SPWQU5.js.map +1 -0
  10. package/dist/chunk-CQWXUU7P.js +239 -0
  11. package/dist/chunk-CQWXUU7P.js.map +1 -0
  12. package/dist/chunk-CXRVPOTI.cjs +244 -0
  13. package/dist/chunk-CXRVPOTI.cjs.map +1 -0
  14. package/dist/chunk-DRUSCLEF.js +177 -0
  15. package/dist/chunk-DRUSCLEF.js.map +1 -0
  16. package/dist/{chunk-VMNATBH3.cjs → chunk-F244Q4KC.cjs} +74 -33
  17. package/dist/chunk-F244Q4KC.cjs.map +1 -0
  18. package/dist/chunk-HVPGR6G5.cjs +647 -0
  19. package/dist/chunk-HVPGR6G5.cjs.map +1 -0
  20. package/dist/{chunk-SNJABBAT.js → chunk-MGP7F65H.js} +3 -3
  21. package/dist/{chunk-SNJABBAT.js.map → chunk-MGP7F65H.js.map} +1 -1
  22. package/dist/chunk-R3MC2AJZ.cjs +2247 -0
  23. package/dist/chunk-R3MC2AJZ.cjs.map +1 -0
  24. package/dist/chunk-SWML743U.js +625 -0
  25. package/dist/chunk-SWML743U.js.map +1 -0
  26. package/dist/chunk-SX3FQDKM.js +2238 -0
  27. package/dist/chunk-SX3FQDKM.js.map +1 -0
  28. package/dist/{chunk-A6N3RPEA.cjs → chunk-WTCXTXTV.cjs} +6 -6
  29. package/dist/{chunk-A6N3RPEA.cjs.map → chunk-WTCXTXTV.cjs.map} +1 -1
  30. package/dist/constants-Bi5uTRp5.d.cts +17 -0
  31. package/dist/constants-Bi5uTRp5.d.ts +17 -0
  32. package/dist/core/index.cjs +69 -29
  33. package/dist/core/index.d.cts +29 -47
  34. package/dist/core/index.d.ts +29 -47
  35. package/dist/core/index.js +3 -3
  36. package/dist/index.cjs +104 -35
  37. package/dist/index.d.cts +4 -2
  38. package/dist/index.d.ts +4 -2
  39. package/dist/index.js +6 -5
  40. package/dist/names/index.cjs +40 -0
  41. package/dist/names/index.cjs.map +1 -0
  42. package/dist/names/index.d.cts +36 -0
  43. package/dist/names/index.d.ts +36 -0
  44. package/dist/names/index.js +3 -0
  45. package/dist/names/index.js.map +1 -0
  46. package/dist/react/index.cjs +454 -397
  47. package/dist/react/index.cjs.map +1 -1
  48. package/dist/react/index.d.cts +17 -3
  49. package/dist/react/index.d.ts +17 -3
  50. package/dist/react/index.js +450 -394
  51. package/dist/react/index.js.map +1 -1
  52. package/dist/solfaces.cdn.global.js +2 -2
  53. package/dist/solfaces.cdn.global.js.map +1 -1
  54. package/dist/themes/index.cjs +29 -17
  55. package/dist/themes/index.d.cts +10 -7
  56. package/dist/themes/index.d.ts +10 -7
  57. package/dist/themes/index.js +1 -1
  58. package/dist/{traits-DAFZnXeS.d.cts → traits-QlWuxZDD.d.cts} +45 -1
  59. package/dist/{traits-DAFZnXeS.d.ts → traits-QlWuxZDD.d.ts} +45 -1
  60. package/dist/vanilla/index.cjs +20 -8
  61. package/dist/vanilla/index.cjs.map +1 -1
  62. package/dist/vanilla/index.d.cts +1 -1
  63. package/dist/vanilla/index.d.ts +1 -1
  64. package/dist/vanilla/index.js +17 -5
  65. package/dist/vanilla/index.js.map +1 -1
  66. package/package.json +22 -5
  67. package/python/solfaces.py +830 -237
  68. package/reference/integrations.md +166 -0
  69. package/reference/react.md +108 -0
  70. package/reference/themes.md +124 -0
  71. package/dist/chunk-2DIKGLXZ.cjs +0 -126
  72. package/dist/chunk-2DIKGLXZ.cjs.map +0 -1
  73. package/dist/chunk-CVFO7YHY.cjs +0 -97
  74. package/dist/chunk-CVFO7YHY.cjs.map +0 -1
  75. package/dist/chunk-H3SK3MNX.cjs +0 -409
  76. package/dist/chunk-H3SK3MNX.cjs.map +0 -1
  77. package/dist/chunk-KSGFMW33.js +0 -401
  78. package/dist/chunk-KSGFMW33.js.map +0 -1
  79. package/dist/chunk-LQWJRHGC.js +0 -86
  80. package/dist/chunk-LQWJRHGC.js.map +0 -1
  81. package/dist/chunk-RX6D5FGH.js.map +0 -1
  82. package/dist/chunk-VMNATBH3.cjs.map +0 -1
  83. package/dist/chunk-WURY4QGH.js +0 -117
  84. package/dist/chunk-WURY4QGH.js.map +0 -1
  85. package/skill.md +0 -463
@@ -1,39 +1,113 @@
1
1
  'use strict';
2
2
 
3
- var chunk2DIKGLXZ_cjs = require('../chunk-2DIKGLXZ.cjs');
3
+ var chunkHVPGR6G5_cjs = require('../chunk-HVPGR6G5.cjs');
4
+ var chunkR3MC2AJZ_cjs = require('../chunk-R3MC2AJZ.cjs');
4
5
  var react = require('react');
5
6
  var jsxRuntime = require('react/jsx-runtime');
6
7
 
7
- function renderFace(traits, skin) {
8
- switch (traits.faceShape) {
8
+ function djb2(str) {
9
+ let hash = 5381;
10
+ for (let i = 0; i < str.length; i++) {
11
+ hash = (hash << 5) + hash + str.charCodeAt(i) | 0;
12
+ }
13
+ return hash >>> 0;
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
+ }
27
+ }
28
+ function Ears({ earFill, earShadow }) {
29
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "11", cy: "34", rx: "4", ry: "5", fill: earFill }),
31
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "11", cy: "34", rx: "2.5", ry: "3.5", fill: earShadow, opacity: "0.3" }),
32
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "53", cy: "34", rx: "4", ry: "5", fill: earFill }),
33
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "53", cy: "34", rx: "2.5", ry: "3.5", fill: earShadow, opacity: "0.3" })
34
+ ] });
35
+ }
36
+ function FaceOverlays({ id }) {
37
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
38
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "16", width: "36", height: "38", rx: "12", ry: "12", fill: `url(#${id}glow)` }),
39
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "16", width: "36", height: "38", rx: "12", ry: "12", fill: `url(#${id}chin)` }),
40
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "22", cy: "42", rx: "5", ry: "3.5", fill: `url(#${id}cL)` }),
41
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "42", cy: "42", rx: "5", ry: "3.5", fill: `url(#${id}cR)` }),
42
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "20", y1: "50", x2: "44", y2: "50", stroke: "currentColor", strokeWidth: "0.3", opacity: "0.08", strokeLinecap: "round" })
43
+ ] });
44
+ }
45
+ function HairFront({ hi, id, hairCol, skin, flat }) {
46
+ const fill = flat ? hairCol : `url(#${id}hg)`;
47
+ switch (hi) {
9
48
  case 0:
10
- return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "32", cy: "34", r: "20", fill: skin });
49
+ return null;
11
50
  case 1:
12
- return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "12", y: "14", width: "40", height: "40", rx: "8", ry: "8", fill: skin });
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 });
13
52
  case 2:
14
- return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: "32", cy: "34", rx: "18", ry: "22", fill: skin });
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
+ ] });
15
61
  case 3:
16
- return /* @__PURE__ */ jsxRuntime.jsx(
17
- "path",
18
- {
19
- d: "M32 12 L50 24 L50 44 L32 56 L14 44 L14 24 Z",
20
- fill: skin,
21
- strokeLinejoin: "round"
22
- }
23
- );
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 = chunkHVPGR6G5_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
+ ] });
24
91
  default:
25
- return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "32", cy: "34", r: "20", fill: skin });
92
+ return null;
26
93
  }
27
94
  }
28
- function renderEyes(traits, eyeCol, eyeWhite = "white") {
29
- const lx = 24, rx = 40, y = 30;
30
- switch (traits.eyeStyle) {
95
+ function Eyes({ ei, eyeCol, eyeWhite, lidColor, full }) {
96
+ const lx = 25, rx = 39, y = 33;
97
+ const lids = full && ei !== 1 && ei !== 5 ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
98
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${lx - 4} ${y - 1.5} Q${lx} ${y - 4} ${lx + 4} ${y - 1.5}`, fill: "none", stroke: lidColor, strokeWidth: "0.5", opacity: "0.4" }),
99
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${rx - 4} ${y - 1.5} Q${rx} ${y - 4} ${rx + 4} ${y - 1.5}`, fill: "none", stroke: lidColor, strokeWidth: "0.5", opacity: "0.4" })
100
+ ] }) : null;
101
+ switch (ei) {
31
102
  case 0:
32
103
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
33
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "3.5", fill: eyeWhite }),
34
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 1, cy: y, r: "2", fill: eyeCol }),
35
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "3.5", fill: eyeWhite }),
36
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 1, cy: y, r: "2", fill: eyeCol })
104
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "4", fill: eyeWhite }),
105
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 0.8, cy: y, r: "2.2", fill: eyeCol }),
106
+ full && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 1.5, cy: y - 1, r: "0.7", fill: "white", opacity: "0.8" }),
107
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "4", fill: eyeWhite }),
108
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 0.8, cy: y, r: "2.2", fill: eyeCol }),
109
+ full && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 1.5, cy: y - 1, r: "0.7", fill: "white", opacity: "0.8" }),
110
+ lids
37
111
  ] });
38
112
  case 1:
39
113
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -42,420 +116,328 @@ function renderEyes(traits, eyeCol, eyeWhite = "white") {
42
116
  ] });
43
117
  case 2:
44
118
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
45
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx, cy: y, rx: "4", ry: "2.5", fill: eyeWhite }),
46
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 0.5, cy: y, r: "1.5", fill: eyeCol }),
47
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx, cy: y, rx: "4", ry: "2.5", fill: eyeWhite }),
48
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 0.5, cy: y, r: "1.5", fill: eyeCol })
119
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx, cy: y, rx: "4.5", ry: "2.8", fill: eyeWhite }),
120
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 0.5, cy: y, r: "1.8", fill: eyeCol }),
121
+ full && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 1.2, cy: y - 0.8, r: "0.6", fill: "white", opacity: "0.7" }),
122
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx, cy: y, rx: "4.5", ry: "2.8", fill: eyeWhite }),
123
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 0.5, cy: y, r: "1.8", fill: eyeCol }),
124
+ full && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 1.2, cy: y - 0.8, r: "0.6", fill: "white", opacity: "0.7" }),
125
+ lids
49
126
  ] });
50
127
  case 3:
51
128
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
52
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "4.5", fill: eyeWhite }),
53
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y + 0.5, r: "2.5", fill: eyeCol }),
54
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "4.5", fill: eyeWhite }),
55
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y + 0.5, r: "2.5", fill: eyeCol })
129
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "5", fill: eyeWhite }),
130
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y + 0.5, r: "2.8", fill: eyeCol }),
131
+ full && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 1.5, cy: y - 1, r: "0.8", fill: "white", opacity: "0.8" }),
132
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "5", fill: eyeWhite }),
133
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y + 0.5, r: "2.8", fill: eyeCol }),
134
+ full && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 1.5, cy: y - 1, r: "0.8", fill: "white", opacity: "0.8" }),
135
+ lids
56
136
  ] });
57
137
  case 4:
58
138
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
59
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx, cy: y + 1, rx: "3.5", ry: "2", fill: eyeWhite }),
139
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx, cy: y + 1, rx: "4", ry: "2.2", fill: eyeWhite }),
60
140
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y + 1, r: "1.5", fill: eyeCol }),
61
- /* @__PURE__ */ jsxRuntime.jsx(
62
- "line",
63
- {
64
- x1: lx - 4,
65
- y1: y - 0.5,
66
- x2: lx + 4,
67
- y2: y - 0.5,
68
- stroke: eyeCol,
69
- strokeWidth: "1",
70
- strokeLinecap: "round"
71
- }
72
- ),
73
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx, cy: y + 1, rx: "3.5", ry: "2", fill: eyeWhite }),
141
+ full && /* @__PURE__ */ jsxRuntime.jsx("line", { x1: lx - 4.5, y1: y - 0.5, x2: lx + 4.5, y2: y - 0.5, stroke: lidColor, strokeWidth: "0.8", strokeLinecap: "round" }),
142
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx, cy: y + 1, rx: "4", ry: "2.2", fill: eyeWhite }),
74
143
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y + 1, r: "1.5", fill: eyeCol }),
75
- /* @__PURE__ */ jsxRuntime.jsx(
76
- "line",
77
- {
78
- x1: rx - 4,
79
- y1: y - 0.5,
80
- x2: rx + 4,
81
- y2: y - 0.5,
82
- stroke: eyeCol,
83
- strokeWidth: "1",
84
- strokeLinecap: "round"
85
- }
86
- )
144
+ full && /* @__PURE__ */ jsxRuntime.jsx("line", { x1: rx - 4.5, y1: y - 0.5, x2: rx + 4.5, y2: y - 0.5, stroke: lidColor, strokeWidth: "0.8", strokeLinecap: "round" }),
145
+ lids
87
146
  ] });
88
147
  case 5:
89
148
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
90
- /* @__PURE__ */ jsxRuntime.jsx(
91
- "path",
92
- {
93
- d: `M${lx - 3} ${y} Q${lx} ${y + 3} ${lx + 3} ${y}`,
94
- fill: "none",
95
- stroke: eyeCol,
96
- strokeWidth: "1.5",
97
- strokeLinecap: "round"
98
- }
99
- ),
100
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "3.5", fill: eyeWhite }),
101
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 1, cy: y, r: "2", fill: eyeCol })
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" })
102
151
  ] });
103
152
  case 6:
104
153
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
105
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "3", fill: eyeWhite }),
106
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 0.5, cy: y, r: "1.5", fill: eyeCol }),
107
- /* @__PURE__ */ jsxRuntime.jsx(
108
- "line",
109
- {
110
- x1: lx + 2,
111
- y1: y - 3,
112
- x2: lx + 3.5,
113
- y2: y - 4.5,
114
- stroke: eyeCol,
115
- strokeWidth: "0.8",
116
- strokeLinecap: "round"
117
- }
118
- ),
119
- /* @__PURE__ */ jsxRuntime.jsx(
120
- "line",
121
- {
122
- x1: lx + 3,
123
- y1: y - 2,
124
- x2: lx + 4.5,
125
- y2: y - 3,
126
- stroke: eyeCol,
127
- strokeWidth: "0.8",
128
- strokeLinecap: "round"
129
- }
130
- ),
131
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "3", fill: eyeWhite }),
132
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 0.5, cy: y, r: "1.5", fill: eyeCol }),
133
- /* @__PURE__ */ jsxRuntime.jsx(
134
- "line",
135
- {
136
- x1: rx + 2,
137
- y1: y - 3,
138
- x2: rx + 3.5,
139
- y2: y - 4.5,
140
- stroke: eyeCol,
141
- strokeWidth: "0.8",
142
- strokeLinecap: "round"
143
- }
144
- ),
145
- /* @__PURE__ */ jsxRuntime.jsx(
146
- "line",
147
- {
148
- x1: rx + 3,
149
- y1: y - 2,
150
- x2: rx + 4.5,
151
- y2: y - 3,
152
- stroke: eyeCol,
153
- strokeWidth: "0.8",
154
- strokeLinecap: "round"
155
- }
156
- )
154
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "3.5", fill: eyeWhite }),
155
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 0.5, cy: y, r: "2", fill: eyeCol }),
156
+ /* @__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
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "3.5", fill: eyeWhite }),
162
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 0.5, cy: y, r: "2", fill: eyeCol }),
163
+ /* @__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
+ lids
157
169
  ] });
158
170
  case 7:
159
171
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
160
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx, cy: y, rx: "4", ry: "1.2", fill: eyeWhite }),
161
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx + 0.5, cy: y, rx: "2", ry: "1", fill: eyeCol }),
162
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx, cy: y, rx: "4", ry: "1.2", fill: eyeWhite }),
163
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx + 0.5, cy: y, rx: "2", ry: "1", fill: eyeCol })
172
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx, cy: y, rx: "4.5", ry: "1.5", fill: eyeWhite }),
173
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: lx + 0.5, cy: y, rx: "2.2", ry: "1.2", fill: eyeCol }),
174
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx, cy: y, rx: "4.5", ry: "1.5", fill: eyeWhite }),
175
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx: rx + 0.5, cy: y, rx: "2.2", ry: "1.2", fill: eyeCol }),
176
+ lids
164
177
  ] });
165
178
  default:
166
179
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
167
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "3", fill: eyeWhite }),
168
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 1, cy: y, r: "2", fill: eyeCol }),
169
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "3", fill: eyeWhite }),
170
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 1, cy: y, r: "2", fill: eyeCol })
180
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx, cy: y, r: "3.5", fill: eyeWhite }),
181
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: lx + 0.8, cy: y, r: "2", fill: eyeCol }),
182
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx, cy: y, r: "3.5", fill: eyeWhite }),
183
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: rx + 0.8, cy: y, r: "2", fill: eyeCol }),
184
+ lids
171
185
  ] });
172
186
  }
173
187
  }
174
- function renderEyebrows(traits, col) {
175
- const lx = 24, rx = 40, y = 25;
176
- switch (traits.eyebrows) {
188
+ function Eyebrows({ bi, browColor }) {
189
+ const lx = 25, rx = 39, y = 27;
190
+ switch (bi) {
177
191
  case 0:
178
- return null;
192
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
193
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: lx - 3, y1: y, x2: lx + 3, y2: y - 0.5, stroke: browColor, strokeWidth: "0.7", strokeLinecap: "round" }),
194
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: rx - 3, y1: y - 0.5, x2: rx + 3, y2: y, stroke: browColor, strokeWidth: "0.7", strokeLinecap: "round" })
195
+ ] });
179
196
  case 1:
180
197
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
181
- /* @__PURE__ */ jsxRuntime.jsx(
182
- "line",
183
- {
184
- x1: lx - 3,
185
- y1: y,
186
- x2: lx + 3,
187
- y2: y,
188
- stroke: col,
189
- strokeWidth: "0.8",
190
- strokeLinecap: "round"
191
- }
192
- ),
193
- /* @__PURE__ */ jsxRuntime.jsx(
194
- "line",
195
- {
196
- x1: rx - 3,
197
- y1: y,
198
- x2: rx + 3,
199
- y2: y,
200
- stroke: col,
201
- strokeWidth: "0.8",
202
- strokeLinecap: "round"
203
- }
204
- )
198
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: lx - 3.5, y1: y, x2: lx + 3.5, y2: y, stroke: browColor, strokeWidth: "1.2", strokeLinecap: "round" }),
199
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: rx - 3.5, y1: y, x2: rx + 3.5, y2: y, stroke: browColor, strokeWidth: "1.2", strokeLinecap: "round" })
205
200
  ] });
206
201
  case 2:
207
202
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
208
- /* @__PURE__ */ jsxRuntime.jsx(
209
- "line",
210
- {
211
- x1: lx - 3.5,
212
- y1: y,
213
- x2: lx + 3.5,
214
- y2: y,
215
- stroke: col,
216
- strokeWidth: "2",
217
- strokeLinecap: "round"
218
- }
219
- ),
220
- /* @__PURE__ */ jsxRuntime.jsx(
221
- "line",
222
- {
223
- x1: rx - 3.5,
224
- y1: y,
225
- x2: rx + 3.5,
226
- y2: y,
227
- stroke: col,
228
- strokeWidth: "2",
229
- strokeLinecap: "round"
230
- }
231
- )
203
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${lx - 3.5} ${y + 0.5} Q${lx} ${y - 1.5} ${lx + 3.5} ${y + 0.5}`, fill: "none", stroke: browColor, strokeWidth: "1.2", strokeLinecap: "round" }),
204
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${rx - 3.5} ${y + 0.5} Q${rx} ${y - 1.5} ${rx + 3.5} ${y + 0.5}`, fill: "none", stroke: browColor, strokeWidth: "1.2", strokeLinecap: "round" })
232
205
  ] });
233
206
  case 3:
234
207
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
235
- /* @__PURE__ */ jsxRuntime.jsx(
236
- "path",
237
- {
238
- d: `M${lx - 3.5} ${y + 1} Q${lx} ${y - 2} ${lx + 3.5} ${y + 1}`,
239
- fill: "none",
240
- stroke: col,
241
- strokeWidth: "1",
242
- strokeLinecap: "round"
243
- }
244
- ),
245
- /* @__PURE__ */ jsxRuntime.jsx(
246
- "path",
247
- {
248
- d: `M${rx - 3.5} ${y + 1} Q${rx} ${y - 2} ${rx + 3.5} ${y + 1}`,
249
- fill: "none",
250
- stroke: col,
251
- strokeWidth: "1",
252
- strokeLinecap: "round"
253
- }
254
- )
208
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${lx - 4} ${y + 1} Q${lx} ${y - 3} ${lx + 4} ${y + 1}`, fill: "none", stroke: browColor, strokeWidth: "1", strokeLinecap: "round" }),
209
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${rx - 4} ${y + 1} Q${rx} ${y - 3} ${rx + 4} ${y + 1}`, fill: "none", stroke: browColor, strokeWidth: "1", strokeLinecap: "round" })
255
210
  ] });
256
211
  case 4:
257
212
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
258
- /* @__PURE__ */ jsxRuntime.jsx(
259
- "line",
260
- {
261
- x1: lx - 3,
262
- y1: y - 1,
263
- x2: lx + 3,
264
- y2: y + 1,
265
- stroke: col,
266
- strokeWidth: "1.2",
267
- strokeLinecap: "round"
268
- }
269
- ),
270
- /* @__PURE__ */ jsxRuntime.jsx(
271
- "line",
272
- {
273
- x1: rx - 3,
274
- y1: y + 1,
275
- x2: rx + 3,
276
- y2: y - 1,
277
- stroke: col,
278
- strokeWidth: "1.2",
279
- strokeLinecap: "round"
280
- }
281
- )
213
+ /* @__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
+ /* @__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" })
282
215
  ] });
283
216
  default:
284
217
  return null;
285
218
  }
286
219
  }
287
- function renderNose(traits, skin, noseCol) {
288
- const cx = 32, y = 36;
289
- const shadow = noseCol ?? skin + "aa";
290
- switch (traits.nose) {
220
+ function Nose({ ni, noseFill }) {
221
+ const cx = 32, y = 39;
222
+ switch (ni) {
291
223
  case 0:
292
- return null;
224
+ return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y, rx: "2", ry: "1.2", fill: noseFill, opacity: "0.35" });
293
225
  case 1:
294
- return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: y, r: "1.5", fill: shadow });
226
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: y, r: "1.8", fill: noseFill, opacity: "0.5" });
295
227
  case 2:
296
- return /* @__PURE__ */ jsxRuntime.jsx(
297
- "path",
298
- {
299
- d: `M${cx} ${y - 1.5} L${cx + 2.5} ${y + 2} L${cx - 2.5} ${y + 2} Z`,
300
- fill: shadow
301
- }
302
- );
228
+ return /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${cx - 2} ${y + 1} Q${cx} ${y - 2} ${cx + 2} ${y + 1}`, fill: "none", stroke: noseFill, strokeWidth: "1", strokeLinecap: "round", opacity: "0.5" });
303
229
  case 3:
304
230
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
305
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cx - 1.5, cy: y, r: "1", fill: shadow }),
306
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cx + 1.5, cy: y, r: "1", fill: shadow })
231
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cx - 1.8, cy: y, r: "1.2", fill: noseFill, opacity: "0.4" }),
232
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cx + 1.8, cy: y, r: "1.2", fill: noseFill, opacity: "0.4" })
307
233
  ] });
308
234
  default:
309
- return null;
235
+ return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y, rx: "2", ry: "1.2", fill: noseFill, opacity: "0.35" });
310
236
  }
311
237
  }
312
- function renderMouth(traits, col, teethCol = "white") {
313
- const cx = 32, y = 42;
314
- switch (traits.mouth) {
238
+ function Mouth({ mi, lipColor, isDark }) {
239
+ const cx = 32, y = 45;
240
+ const teethCol = isDark ? "#e8e0d8" : "#ffffff";
241
+ switch (mi) {
315
242
  case 0:
316
- return /* @__PURE__ */ jsxRuntime.jsx(
317
- "path",
318
- {
319
- d: `M${cx - 4} ${y} Q${cx} ${y + 4} ${cx + 4} ${y}`,
320
- fill: "none",
321
- stroke: col,
322
- strokeWidth: "1.2",
323
- strokeLinecap: "round"
324
- }
325
- );
243
+ 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" });
326
244
  case 1:
327
- return /* @__PURE__ */ jsxRuntime.jsx(
328
- "line",
329
- {
330
- x1: cx - 3,
331
- y1: y + 1,
332
- x2: cx + 3,
333
- y2: y + 1,
334
- stroke: col,
335
- strokeWidth: "1.2",
336
- strokeLinecap: "round"
337
- }
338
- );
245
+ return /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx - 3, y1: y + 1, x2: cx + 3, y2: y + 1, stroke: lipColor, strokeWidth: "1.2", strokeLinecap: "round" });
339
246
  case 2:
340
- return /* @__PURE__ */ jsxRuntime.jsx(
341
- "path",
342
- {
343
- d: `M${cx - 6} ${y} Q${cx} ${y + 5} ${cx + 6} ${y}`,
344
- fill: "none",
345
- stroke: col,
346
- strokeWidth: "1.5",
347
- strokeLinecap: "round"
348
- }
349
- );
247
+ return /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${cx - 5} ${y} Q${cx} ${y + 5} ${cx + 5} ${y}`, fill: "none", stroke: lipColor, strokeWidth: "1.5", strokeLinecap: "round" });
350
248
  case 3:
351
- return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + 1, rx: "3", ry: "2.5", fill: col, opacity: "0.8" });
249
+ return /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + 1, rx: "2.5", ry: "3", fill: lipColor, opacity: "0.7" });
352
250
  case 4:
353
- return /* @__PURE__ */ jsxRuntime.jsx(
354
- "path",
355
- {
356
- d: `M${cx - 4} ${y + 1} Q${cx - 1} ${y + 1} ${cx + 4} ${y - 1}`,
357
- fill: "none",
358
- stroke: col,
359
- strokeWidth: "1.2",
360
- strokeLinecap: "round"
361
- }
362
- );
251
+ return /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${cx - 4} ${y + 1} Q${cx + 1} ${y + 1} ${cx + 4} ${y - 1.5}`, fill: "none", stroke: lipColor, strokeWidth: "1.3", strokeLinecap: "round" });
363
252
  case 5:
364
- return /* @__PURE__ */ jsxRuntime.jsx(
365
- "path",
366
- {
367
- d: `M${cx - 6} ${y} Q${cx} ${y + 6} ${cx + 6} ${y}`,
368
- fill: teethCol,
369
- stroke: col,
370
- strokeWidth: "1"
371
- }
372
- );
253
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
254
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${cx - 5} ${y} Q${cx} ${y + 6} ${cx + 5} ${y}`, fill: teethCol, stroke: lipColor, strokeWidth: "1" }),
255
+ /* @__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
+ ] });
257
+ 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" });
259
+ case 7:
260
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
261
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + 1, rx: "3.5", ry: "2", fill: lipColor, opacity: "0.25" }),
262
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M${cx - 3} ${y} Q${cx} ${y + 2.5} ${cx + 3} ${y}`, fill: "none", stroke: lipColor, strokeWidth: "1.2", strokeLinecap: "round" })
263
+ ] });
373
264
  default:
374
- return /* @__PURE__ */ jsxRuntime.jsx(
375
- "path",
376
- {
377
- d: `M${cx - 4} ${y} Q${cx} ${y + 4} ${cx + 4} ${y}`,
378
- fill: "none",
379
- stroke: col,
380
- strokeWidth: "1.2",
381
- strokeLinecap: "round"
382
- }
383
- );
265
+ 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" });
384
266
  }
385
267
  }
386
- function renderHair(traits, hairCol) {
387
- switch (traits.hairStyle) {
268
+ function Accessory({ ai, glassesColor, earringColor, headbandColor }) {
269
+ switch (ai) {
388
270
  case 0:
389
271
  return null;
390
272
  case 1:
391
- return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "12", width: "36", height: "12", rx: "6", ry: "6", fill: hairCol });
273
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "40", cy: "44", r: "0.8", fill: "#3a2a2a" });
392
274
  case 2:
393
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: hairCol, children: [
394
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "16", width: "36", height: "8", rx: "2" }),
395
- /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "18,16 22,6 26,16" }),
396
- /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "26,16 30,4 34,16" }),
397
- /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "34,16 38,6 42,16" }),
398
- /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "42,16 46,10 48,16" })
275
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: glassesColor, strokeWidth: "1", children: [
276
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "25", cy: "33", r: "5.5" }),
277
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "39", cy: "33", r: "5.5" }),
278
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "30.5", y1: "33", x2: "33.5", y2: "33" }),
279
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19.5", y1: "33", x2: "14", y2: "31" }),
280
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "44.5", y1: "33", x2: "50", y2: "31" })
399
281
  ] });
400
282
  case 3:
401
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: hairCol, children: [
402
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "14", width: "36", height: "10", rx: "4" }),
403
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M14 18 Q8 14 10 8 Q14 10 20 14 Z" })
283
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: glassesColor, strokeWidth: "1", children: [
284
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "19", y: "29", width: "12", height: "8", rx: "1.5" }),
285
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "33", y: "29", width: "12", height: "8", rx: "1.5" }),
286
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "31", y1: "33", x2: "33", y2: "33" }),
287
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19", y1: "33", x2: "14", y2: "31" }),
288
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "45", y1: "33", x2: "50", y2: "31" })
404
289
  ] });
405
290
  case 4:
406
- return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "26", y: "4", width: "12", height: "20", rx: "4", ry: "2", fill: hairCol });
407
- case 5:
408
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: hairCol, children: [
409
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "14", y: "12", width: "36", height: "10", rx: "4" }),
410
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "10", y: "18", width: "8", height: "24", rx: "3" }),
411
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "46", y: "18", width: "8", height: "24", rx: "3" })
291
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
292
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "10", cy: "38", r: "1.5", fill: earringColor }),
293
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "10", cy: "41", r: "2", fill: earringColor, opacity: "0.8" })
412
294
  ] });
295
+ case 5:
296
+ return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "13", y: "20", width: "38", height: "3.5", rx: "1.5", fill: headbandColor, opacity: "0.85" });
413
297
  case 6:
414
- return /* @__PURE__ */ jsxRuntime.jsx(
415
- "path",
416
- {
417
- d: "M12 22 Q12 10 32 10 Q52 10 52 22 L52 38 Q52 42 48 42 L48 26 Q48 16 32 16 Q16 16 16 26 L16 42 Q12 42 12 38 Z",
418
- fill: hairCol
419
- }
420
- );
298
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "#a0785a", opacity: "0.35", children: [
299
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "21", cy: "40", r: "0.6" }),
300
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "23", cy: "42", r: "0.5" }),
301
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "19", cy: "41.5", r: "0.5" }),
302
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "43", cy: "40", r: "0.6" }),
303
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "41", cy: "42", r: "0.5" }),
304
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "45", cy: "41.5", r: "0.5" })
305
+ ] });
421
306
  case 7:
422
- return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "15", y: "13", width: "34", height: "9", rx: "8", ry: "4", fill: hairCol, opacity: "0.7" });
423
- default:
424
- return null;
425
- }
426
- }
427
- function renderAccessory(traits, col) {
428
- switch (traits.accessory) {
429
- case 0:
430
- case 1:
431
- return null;
432
- case 2:
433
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: col, strokeWidth: "1", children: [
434
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "24", cy: "30", r: "5" }),
435
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "40", cy: "30", r: "5" }),
436
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "29", y1: "30", x2: "35", y2: "30" }),
437
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19", y1: "30", x2: "14", y2: "28" }),
438
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "45", y1: "30", x2: "50", y2: "28" })
307
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
308
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "10", cy: "37", r: "1.2", fill: earringColor }),
309
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "54", cy: "37", r: "1.2", fill: earringColor })
439
310
  ] });
440
- case 3:
441
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: col, strokeWidth: "1", children: [
442
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "19", y: "26", width: "10", height: "8", rx: "1" }),
443
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "35", y: "26", width: "10", height: "8", rx: "1" }),
444
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "29", y1: "30", x2: "35", y2: "30" }),
445
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19", y1: "30", x2: "14", y2: "28" }),
446
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "45", y1: "30", x2: "50", y2: "28" })
311
+ case 8:
312
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { fill: "none", stroke: glassesColor, strokeWidth: "1.2", children: [
313
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 30 Q19 28 25 28 Q31 28 31 33 Q31 38 25 38 Q19 38 19 33 Z", fill: glassesColor, fillOpacity: "0.15" }),
314
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M33 30 Q33 28 39 28 Q45 28 45 33 Q45 38 39 38 Q33 38 33 33 Z", fill: glassesColor, fillOpacity: "0.15" }),
315
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "31", y1: "32", x2: "33", y2: "32" }),
316
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "19", y1: "31", x2: "14", y2: "29" }),
317
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "45", y1: "31", x2: "50", y2: "29" })
447
318
  ] });
448
- case 4:
449
- return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11", cy: "36", r: "2", fill: col, stroke: col, strokeWidth: "0.5" });
450
- case 5:
319
+ case 9:
451
320
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
452
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "12", y: "20", width: "40", height: "4", rx: "1", fill: col }),
453
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 22 L8 26 L12 24 Z", fill: col })
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)" })
454
325
  ] });
455
326
  default:
456
327
  return null;
457
328
  }
458
329
  }
330
+ function PixelWrapper({ svgString, size, theme }) {
331
+ const density = theme._pixelDensity ?? 16;
332
+ const rounded = theme._pixelRounded ?? true;
333
+ const outline = theme._pixelOutline ?? false;
334
+ const outlineColor = theme._pixelOutlineColor ?? "#000";
335
+ const outlineWidth = theme._pixelOutlineWidth ?? 1;
336
+ const scanlines = theme._pixelScanlines ?? false;
337
+ const scanlineOpacity = theme._pixelScanlineOpacity ?? 0.08;
338
+ const scanlineSpacing = theme._pixelScanlineSpacing ?? 2;
339
+ const grid = theme._pixelGrid ?? false;
340
+ const gridOpacity = theme._pixelGridOpacity ?? 0.06;
341
+ const gridColor = theme._pixelGridColor ?? "#000";
342
+ const shadow = theme._pixelShadow ?? false;
343
+ const shadowColor = theme._pixelShadowColor ?? "rgba(0,0,0,0.3)";
344
+ const shadowOffset = theme._pixelShadowOffset ?? 2;
345
+ const contrast = theme._pixelContrast;
346
+ const saturation = theme._pixelSaturation;
347
+ const brightness = theme._pixelBrightness;
348
+ const dataUri = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgString)}`;
349
+ const filters = [];
350
+ if (shadow) filters.push(`drop-shadow(${shadowOffset}px ${shadowOffset}px 0px ${shadowColor})`);
351
+ if (contrast !== void 0) filters.push(`contrast(${contrast})`);
352
+ if (saturation !== void 0) filters.push(`saturate(${saturation})`);
353
+ if (brightness !== void 0) filters.push(`brightness(${brightness})`);
354
+ const containerStyle = {
355
+ position: "relative",
356
+ width: size,
357
+ height: size,
358
+ display: "inline-block",
359
+ ...filters.length ? { filter: filters.join(" ") } : {}
360
+ };
361
+ const imgStyle = {
362
+ width: size,
363
+ height: size,
364
+ imageRendering: "pixelated",
365
+ borderRadius: rounded ? "12%" : 0,
366
+ display: "block",
367
+ border: outline ? `${outlineWidth}px solid ${outlineColor}` : "none"
368
+ };
369
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: containerStyle, children: [
370
+ /* @__PURE__ */ jsxRuntime.jsx("img", { src: dataUri, width: density, height: density, style: imgStyle, alt: "" }),
371
+ scanlines && /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
372
+ position: "absolute",
373
+ inset: 0,
374
+ background: `repeating-linear-gradient(0deg, transparent, transparent ${scanlineSpacing}px, rgba(0,0,0,${scanlineOpacity}) ${scanlineSpacing}px, rgba(0,0,0,${scanlineOpacity}) ${scanlineSpacing + 1}px)`,
375
+ pointerEvents: "none",
376
+ borderRadius: rounded ? "12%" : 0
377
+ } }),
378
+ grid && /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
379
+ position: "absolute",
380
+ inset: 0,
381
+ backgroundSize: `${size / density}px ${size / density}px`,
382
+ backgroundImage: `linear-gradient(${gridColor} ${gridOpacity}, transparent ${gridOpacity}), linear-gradient(90deg, ${gridColor} ${gridOpacity}, transparent ${gridOpacity})`,
383
+ pointerEvents: "none",
384
+ borderRadius: rounded ? "12%" : 0
385
+ } })
386
+ ] });
387
+ }
388
+ function GlassWrapper({ children, size, theme }) {
389
+ const blurRadius = theme._blurRadius ?? 12;
390
+ const saturate = theme._saturate ?? 1.8;
391
+ const tintOpacity = theme._tintOpacity ?? 0.12;
392
+ const tintColor = theme._tintColor ?? "rgba(255,255,255,1)";
393
+ const borderOpacity = theme._borderOpacity ?? 0.25;
394
+ const borderWidth = theme._borderWidth ?? 1;
395
+ const borderColor = theme._borderColor ?? `rgba(255,255,255,${borderOpacity})`;
396
+ const specularOpacity = theme._specularOpacity ?? 0.25;
397
+ const specularColor = theme._specularColor ?? "rgba(255,255,255,1)";
398
+ const specularEnd = theme._specularEnd ?? 50;
399
+ const lightAngle = theme._lightAngle ?? 135;
400
+ 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;
403
+ const containerStyle = {
404
+ position: "relative",
405
+ width: size,
406
+ height: size,
407
+ display: "inline-block",
408
+ borderRadius: bgRadius,
409
+ overflow: "hidden",
410
+ backdropFilter: `blur(${blurRadius}px) saturate(${saturate})`,
411
+ WebkitBackdropFilter: `blur(${blurRadius}px) saturate(${saturate})`,
412
+ border: `${borderWidth}px solid ${borderColor}`,
413
+ boxShadow: shadowStr
414
+ };
415
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: containerStyle, children: [
416
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
417
+ position: "absolute",
418
+ inset: 0,
419
+ backgroundColor: tintColor,
420
+ opacity: tintOpacity,
421
+ borderRadius: bgRadius,
422
+ pointerEvents: "none"
423
+ } }),
424
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { position: "relative", zIndex: 1 }, children }),
425
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
426
+ position: "absolute",
427
+ inset: 0,
428
+ background: `linear-gradient(${lightAngle}deg, ${specularColor.replace("1)", `${specularOpacity})`)} 0%, transparent ${specularEnd}%)`,
429
+ borderRadius: bgRadius,
430
+ pointerEvents: "none"
431
+ } }),
432
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
433
+ position: "absolute",
434
+ inset: 0,
435
+ borderRadius: bgRadius,
436
+ boxShadow: `inset 0 0 0 1px rgba(255,255,255,${rimIntensity})`,
437
+ pointerEvents: "none"
438
+ } })
439
+ ] });
440
+ }
459
441
  function SolFace({
460
442
  walletAddress,
461
443
  size = 64,
@@ -463,35 +445,62 @@ function SolFace({
463
445
  theme,
464
446
  traitOverrides,
465
447
  colorOverrides,
448
+ detail: detailProp,
449
+ showName = false,
450
+ namePosition = "below",
451
+ nameFormat = "display",
466
452
  className,
467
453
  style,
468
454
  ...rest
469
455
  }) {
470
456
  const traits = react.useMemo(
471
- () => chunk2DIKGLXZ_cjs.generateTraits(walletAddress, traitOverrides),
457
+ () => chunkHVPGR6G5_cjs.generateTraits(walletAddress, traitOverrides),
472
458
  [walletAddress, traitOverrides]
473
459
  );
474
- const skinColors = theme?.skinColors ?? chunk2DIKGLXZ_cjs.SKIN_COLORS;
475
- const eyeColors = theme?.eyeColors ?? chunk2DIKGLXZ_cjs.EYE_COLORS;
476
- const hairColors = theme?.hairColors ?? chunk2DIKGLXZ_cjs.HAIR_COLORS;
477
- const bgColors = theme?.bgColors ?? chunk2DIKGLXZ_cjs.BG_COLORS;
460
+ const detailOpt = detailProp ?? "auto";
461
+ const full = detailOpt === "full" || detailOpt === "auto" && size >= 48;
462
+ const flat = theme?.flat ?? false;
463
+ const skinColors = theme?.skinColors ?? chunkHVPGR6G5_cjs.SKIN_COLORS;
464
+ const eyeColors = theme?.eyeColors ?? chunkHVPGR6G5_cjs.EYE_COLORS;
465
+ const hairColors = theme?.hairColors ?? chunkHVPGR6G5_cjs.HAIR_COLORS;
466
+ const bgColors = theme?.bgColors ?? chunkHVPGR6G5_cjs.BG_COLORS;
478
467
  const skin = colorOverrides?.skin ?? skinColors[traits.skinColor % skinColors.length];
479
468
  const eyeCol = colorOverrides?.eyes ?? eyeColors[traits.eyeColor % eyeColors.length];
480
469
  const hairCol = colorOverrides?.hair ?? hairColors[traits.hairColor % hairColors.length];
481
470
  const bgCol = colorOverrides?.bg ?? bgColors[traits.bgColor % bgColors.length];
482
- const bgOpacity = theme?.bgOpacity ?? 0.15;
471
+ const derived = react.useMemo(() => chunkHVPGR6G5_cjs.deriveSkinColors(skin), [skin]);
472
+ const bgOpacity = theme?.bgOpacity ?? 1;
483
473
  const bgRadius = theme?.bgRadius ?? 4;
484
- const mouthCol = colorOverrides?.mouth ?? theme?.mouthColor ?? "#c05050";
485
- const browCol = colorOverrides?.eyebrow ?? theme?.eyebrowColor ?? "#2a2020";
486
- const accCol = colorOverrides?.accessory ?? theme?.accessoryColor ?? "#444";
487
- const eyeWhite = colorOverrides?.eyeWhite ?? theme?.eyeWhiteColor ?? "white";
488
- const noseCol = colorOverrides?.nose ?? theme?.noseColor;
489
- const uid = react.useMemo(() => `sf-${walletAddress.slice(0, 8)}`, [walletAddress]);
474
+ const browColor = colorOverrides?.eyebrow ?? theme?.eyebrowColor ?? derived.browColor;
475
+ const noseFill = colorOverrides?.nose ?? theme?.noseColor ?? derived.noseFill;
476
+ const lipColor = colorOverrides?.mouth ?? theme?.mouthColor ?? derived.lipColor;
477
+ const eyeWhite = colorOverrides?.eyeWhite ?? theme?.eyeWhiteColor ?? derived.eyeWhiteAdapted;
478
+ const glassesColor = theme?.glassesColor ?? "#4a4a5a";
479
+ const earringColor = theme?.earringColor ?? chunkHVPGR6G5_cjs.blend(skin, "#d4a840", 0.4);
480
+ const headbandColor = theme?.headbandColor ?? chunkHVPGR6G5_cjs.blend(hairCol, "#c04040", 0.5);
481
+ const id = react.useMemo(() => "sf" + djb2(walletAddress).toString(36), [walletAddress]);
482
+ const cheekEnabled = theme?.cheekEnabled ?? true;
483
+ const cheekColor = theme?.cheekColor ?? derived.cheekColor;
484
+ const cheekOpacity = theme?.cheekOpacity ?? derived.cheekOpacity;
485
+ const hi = traits.hairStyle % 10;
486
+ const ai = chunkHVPGR6G5_cjs.effectiveAccessory(traits);
490
487
  const blinkEnabled = !!enableBlink;
491
488
  const blinkDuration = typeof enableBlink === "object" ? enableBlink.duration ?? 4 : 4;
492
489
  const blinkDelay = typeof enableBlink === "object" ? enableBlink.delay ?? 0 : 0;
493
490
  const delayStr = blinkDelay ? ` ${blinkDelay}s` : "";
494
- return /* @__PURE__ */ jsxRuntime.jsxs(
491
+ const bgFill = flat ? bgCol : `url(#${id}bg)`;
492
+ const skinFill = flat ? skin : `url(#${id}sg)`;
493
+ if (theme?._pixel) {
494
+ const pixelSvg = chunkHVPGR6G5_cjs.renderSolFaceSVG(walletAddress, {
495
+ size,
496
+ theme: { ...theme, _pixel: false, _glass: false },
497
+ traitOverrides,
498
+ colorOverrides,
499
+ detail: detailProp
500
+ });
501
+ return /* @__PURE__ */ jsxRuntime.jsx(PixelWrapper, { svgString: pixelSvg, size, theme });
502
+ }
503
+ const svgElement = /* @__PURE__ */ jsxRuntime.jsxs(
495
504
  "svg",
496
505
  {
497
506
  xmlns: "http://www.w3.org/2000/svg",
@@ -502,42 +511,90 @@ function SolFace({
502
511
  style: { display: "block", ...style },
503
512
  ...rest,
504
513
  children: [
514
+ !flat && /* @__PURE__ */ jsxRuntime.jsxs("defs", { children: [
515
+ /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: `${id}sg`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
516
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: derived.skinHi }),
517
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: derived.skinLo })
518
+ ] }),
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: chunkHVPGR6G5_cjs.lighten(hairCol, 0.15) }),
521
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: chunkHVPGR6G5_cjs.darken(hairCol, 0.15) })
522
+ ] }),
523
+ /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: `${id}bg`, x1: "0", y1: "0", x2: "1", y2: "1", children: [
524
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: chunkHVPGR6G5_cjs.lighten(bgCol, 0.12) }),
525
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: chunkHVPGR6G5_cjs.darken(bgCol, 0.12) })
526
+ ] }),
527
+ full && cheekEnabled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
528
+ /* @__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 }),
530
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "#ffffff", stopOpacity: 0 })
531
+ ] }),
532
+ /* @__PURE__ */ jsxRuntime.jsxs("radialGradient", { id: `${id}chin`, cx: "0.5", cy: "0.85", r: "0.35", children: [
533
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: derived.skinLo, stopOpacity: 0.3 }),
534
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: derived.skinLo, stopOpacity: 0 })
535
+ ] }),
536
+ /* @__PURE__ */ jsxRuntime.jsxs("radialGradient", { id: `${id}cL`, cx: "0.5", cy: "0.5", r: "0.5", children: [
537
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: cheekColor, stopOpacity: cheekOpacity }),
538
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: cheekColor, stopOpacity: 0 })
539
+ ] }),
540
+ /* @__PURE__ */ jsxRuntime.jsxs("radialGradient", { id: `${id}cR`, cx: "0.5", cy: "0.5", r: "0.5", children: [
541
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: cheekColor, stopOpacity: cheekOpacity }),
542
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: cheekColor, stopOpacity: 0 })
543
+ ] })
544
+ ] })
545
+ ] }),
505
546
  blinkEnabled && /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
506
- @keyframes ${uid}-blink {
547
+ @keyframes ${id}-blink {
507
548
  0%, 90%, 100% { transform: scaleY(1); }
508
549
  95% { transform: scaleY(0.1); }
509
550
  }
510
- .${uid}-eyes {
511
- animation: ${uid}-blink ${blinkDuration}s ease-in-out${delayStr} infinite;
512
- transform-origin: 32px 30px;
551
+ .${id}-eyes {
552
+ animation: ${id}-blink ${blinkDuration}s ease-in-out${delayStr} infinite;
553
+ transform-origin: 32px 33px;
513
554
  }
514
555
  ` }),
515
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "64", height: "64", fill: bgCol, opacity: bgOpacity, rx: bgRadius }),
516
- renderHair(traits, hairCol),
517
- renderFace(traits, skin),
518
- /* @__PURE__ */ jsxRuntime.jsx("g", { className: blinkEnabled ? `${uid}-eyes` : void 0, children: renderEyes(traits, eyeCol, eyeWhite) }),
519
- renderEyebrows(traits, browCol),
520
- renderNose(traits, skin, noseCol),
521
- renderMouth(traits, mouthCol, eyeWhite),
522
- renderAccessory(traits, accCol),
523
- theme?.border && /* @__PURE__ */ jsxRuntime.jsx(
524
- "rect",
525
- {
526
- x: "0",
527
- y: "0",
528
- width: "64",
529
- height: "64",
530
- fill: "none",
531
- stroke: theme.border.color,
532
- strokeWidth: theme.border.width,
533
- rx: bgRadius
534
- }
535
- )
556
+ /* @__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 }),
566
+ /* @__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 }),
568
+ 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 })
536
569
  ]
537
570
  }
538
571
  );
572
+ if (theme?._glass) {
573
+ const glassEl = /* @__PURE__ */ jsxRuntime.jsx(GlassWrapper, { size, theme, children: svgElement });
574
+ if (!showName) return glassEl;
575
+ const glassName = chunkR3MC2AJZ_cjs.deriveName(walletAddress, nameFormat);
576
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "center", gap: 4 }, children: [
577
+ namePosition === "above" && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: Math.max(10, size / 5), fontFamily: "inherit" }, children: glassName }),
578
+ glassEl,
579
+ namePosition === "below" && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: Math.max(10, size / 5), fontFamily: "inherit" }, children: glassName })
580
+ ] });
581
+ }
582
+ if (!showName) return svgElement;
583
+ const walletName = chunkR3MC2AJZ_cjs.deriveName(walletAddress, nameFormat);
584
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "inline-flex", flexDirection: "column", alignItems: "center", gap: 4 }, children: [
585
+ namePosition === "above" && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: Math.max(10, size / 5), fontFamily: "inherit" }, children: walletName }),
586
+ svgElement,
587
+ namePosition === "below" && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: Math.max(10, size / 5), fontFamily: "inherit" }, children: walletName })
588
+ ] });
589
+ }
590
+ function useSolName(wallet, format) {
591
+ return react.useMemo(() => {
592
+ if (format) return chunkR3MC2AJZ_cjs.deriveName(wallet, format);
593
+ return chunkR3MC2AJZ_cjs.deriveIdentity(wallet);
594
+ }, [wallet, format]);
539
595
  }
540
596
 
541
597
  exports.SolFace = SolFace;
598
+ exports.useSolName = useSolName;
542
599
  //# sourceMappingURL=index.cjs.map
543
600
  //# sourceMappingURL=index.cjs.map