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