@usenavii/core 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/parts.js CHANGED
@@ -506,6 +506,76 @@ function renderTopper(id, anchor, palette) {
506
506
  }
507
507
  }
508
508
 
509
+ // src/parts/outfit.ts
510
+ function renderOutfit(id, anchor, palette) {
511
+ if (id === "none") return "";
512
+ const cx = anchor.cx;
513
+ const cy = anchor.mouthY + (anchor.groundY - anchor.mouthY) * 0.55;
514
+ const ink = palette.ink;
515
+ const accent = palette.accent;
516
+ switch (id) {
517
+ case "collar":
518
+ return [
519
+ `<path d="M${cx - 9} ${cy} L${cx - 2} ${cy - 4} L${cx - 2} ${cy + 5} Z" fill="${accent}" stroke="${ink}" stroke-width="0.7" />`,
520
+ `<path d="M${cx + 9} ${cy} L${cx + 2} ${cy - 4} L${cx + 2} ${cy + 5} Z" fill="${accent}" stroke="${ink}" stroke-width="0.7" />`,
521
+ // tiny button at center
522
+ `<circle cx="${cx}" cy="${cy + 4}" r="0.9" fill="${ink}" />`
523
+ ].join("");
524
+ case "scarf":
525
+ return [
526
+ // wrap band
527
+ `<path d="M${cx - 14} ${cy - 2} Q${cx} ${cy + 3} ${cx + 14} ${cy - 2} L${cx + 14} ${cy + 3} Q${cx} ${cy + 8} ${cx - 14} ${cy + 3} Z" fill="${palette.bodyTo}" stroke="${ink}" stroke-width="0.6" />`,
528
+ // tail 1 (left)
529
+ `<path d="M${cx - 6} ${cy + 5} L${cx - 9} ${cy + 12} L${cx - 4} ${cy + 12} L${cx - 2} ${cy + 5} Z" fill="${palette.bodyTo}" stroke="${ink}" stroke-width="0.5" />`,
530
+ // tail 2 (slightly right)
531
+ `<path d="M${cx + 1} ${cy + 6} L${cx + 4} ${cy + 13} L${cx - 1} ${cy + 13} L${cx - 2} ${cy + 6} Z" fill="${palette.bodyFrom}" stroke="${ink}" stroke-width="0.5" />`
532
+ ].join("");
533
+ case "bowtie":
534
+ return [
535
+ // left wing
536
+ `<path d="M${cx - 1} ${cy} L${cx - 9} ${cy - 4} L${cx - 9} ${cy + 4} Z" fill="${palette.bodyTo}" stroke="${ink}" stroke-width="0.7" />`,
537
+ // right wing
538
+ `<path d="M${cx + 1} ${cy} L${cx + 9} ${cy - 4} L${cx + 9} ${cy + 4} Z" fill="${palette.bodyTo}" stroke="${ink}" stroke-width="0.7" />`,
539
+ // center knot
540
+ `<rect x="${cx - 1.4}" y="${cy - 2.4}" width="2.8" height="4.8" rx="0.8" fill="${palette.bodyFrom}" stroke="${ink}" stroke-width="0.5" />`
541
+ ].join("");
542
+ case "sunflower": {
543
+ const fx = cx - 8;
544
+ const fy = cy + 2;
545
+ const petals = [];
546
+ for (let i = 0; i < 8; i++) {
547
+ const a = i / 8 * Math.PI * 2;
548
+ const px = fx + Math.cos(a) * 3.2;
549
+ const py = fy + Math.sin(a) * 3.2;
550
+ petals.push(
551
+ `<ellipse cx="${px.toFixed(2)}" cy="${py.toFixed(2)}" rx="2.4" ry="1.3" fill="#FACC15" stroke="${ink}" stroke-width="0.35" transform="rotate(${(a * 180 / Math.PI).toFixed(1)} ${px.toFixed(2)} ${py.toFixed(2)})" />`
552
+ );
553
+ }
554
+ return [
555
+ // stem (tucked behind)
556
+ `<path d="M${fx + 2} ${fy + 2} Q${fx + 4} ${fy + 6} ${fx + 1} ${fy + 10}" stroke="#16A34A" stroke-width="1.1" fill="none" stroke-linecap="round" />`,
557
+ // leaf
558
+ `<path d="M${fx + 3} ${fy + 6} Q${fx + 7} ${fy + 4} ${fx + 6} ${fy + 8} Q${fx + 4} ${fy + 8} ${fx + 3} ${fy + 6} Z" fill="#22C55E" stroke="${ink}" stroke-width="0.35" />`,
559
+ ...petals,
560
+ // center disc
561
+ `<circle cx="${fx}" cy="${fy}" r="2" fill="#92400E" stroke="${ink}" stroke-width="0.4" />`,
562
+ // texture dots on disc
563
+ `<circle cx="${fx - 0.6}" cy="${fy - 0.5}" r="0.4" fill="#451A03" />`,
564
+ `<circle cx="${fx + 0.7}" cy="${fy + 0.3}" r="0.4" fill="#451A03" />`,
565
+ `<circle cx="${fx - 0.4}" cy="${fy + 0.8}" r="0.4" fill="#451A03" />`
566
+ ].join("");
567
+ }
568
+ case "necklace":
569
+ return [
570
+ // chain (curve from collarbone left → drop → right)
571
+ `<path d="M${cx - 10} ${cy} Q${cx} ${cy + 8} ${cx + 10} ${cy}" stroke="${accent}" stroke-width="0.8" fill="none" stroke-linecap="round" />`,
572
+ // pendant
573
+ `<circle cx="${cx}" cy="${cy + 7}" r="1.6" fill="${accent}" stroke="${ink}" stroke-width="0.5" />`,
574
+ `<circle cx="${cx}" cy="${cy + 7}" r="0.7" fill="${palette.blush}" />`
575
+ ].join("");
576
+ }
577
+ }
578
+
509
579
  // src/parts/index.ts
510
580
  var BODY_IDS = [
511
581
  "orb",
@@ -568,7 +638,18 @@ var TOPPER_IDS = [
568
638
  "crown",
569
639
  "antlers"
570
640
  ];
641
+ var OUTFIT_IDS = [
642
+ // 'none' weighted heavy — most avatars stay plain-chested
643
+ "none",
644
+ "none",
645
+ "none",
646
+ "collar",
647
+ "scarf",
648
+ "bowtie",
649
+ "sunflower",
650
+ "necklace"
651
+ ];
571
652
 
572
- export { ACCESSORY_IDS, ANCHORS, ANTENNA_IDS, BACKGROUND_IDS, BODY_IDS, EYE_IDS, MOUTH_IDS, PALETTES, PALETTE_BY_ID, TOPPER_IDS, bodyAnchor, renderAccessory, renderAntenna, renderBackground, renderBody, renderBodyDefs, renderEyes, renderMouth, renderTopper };
653
+ export { ACCESSORY_IDS, ANCHORS, ANTENNA_IDS, BACKGROUND_IDS, BODY_IDS, EYE_IDS, MOUTH_IDS, OUTFIT_IDS, PALETTES, PALETTE_BY_ID, TOPPER_IDS, bodyAnchor, renderAccessory, renderAntenna, renderBackground, renderBody, renderBodyDefs, renderEyes, renderMouth, renderOutfit, renderTopper };
573
654
  //# sourceMappingURL=parts.js.map
574
655
  //# sourceMappingURL=parts.js.map
package/dist/parts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/parts/palette.ts","../src/parts/anchor.ts","../src/parts/body.ts","../src/parts/eyes.ts","../src/parts/mouth.ts","../src/parts/antenna.ts","../src/parts/accessory.ts","../src/parts/background.ts","../src/parts/topper.ts","../src/parts/index.ts"],"names":[],"mappings":"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","file":"parts.js","sourcesContent":["import type { Palette } from '../types.js';\n\n/**\n * Palette set seeded from the Comms360 \"Pulse\" mascot DNA, extended to provide\n * enough hue variety for identity-level differentiation across many users.\n *\n * `bodyFrom`/`bodyTo` feed the radial gradient. `ink` is the line/face color\n * (dark complement of the body). `accent` is used for antenna sparks and other\n * highlights. `blush` is the cheek tint.\n */\nexport const PALETTES: readonly Palette[] = [\n { id: 'indigo', bodyFrom: '#818CF8', bodyTo: '#6366F1', accent: '#FFFFFF', ink: '#1E1B4B', blush: '#F9A8D4' },\n { id: 'mint', bodyFrom: '#6EE7B7', bodyTo: '#34D399', accent: '#ECFDF5', ink: '#064E3B', blush: '#FBCFE8' },\n { id: 'amber', bodyFrom: '#FCD34D', bodyTo: '#F59E0B', accent: '#FFF7ED', ink: '#78350F', blush: '#FB7185' },\n { id: 'sky', bodyFrom: '#93C5FD', bodyTo: '#3B82F6', accent: '#FFFFFF', ink: '#1E3A8A', blush: '#F9A8D4' },\n { id: 'violet', bodyFrom: '#C084FC', bodyTo: '#A855F7', accent: '#FAE8FF', ink: '#4C1D95', blush: '#F472B6' },\n { id: 'cyan', bodyFrom: '#67E8F9', bodyTo: '#06B6D4', accent: '#ECFEFF', ink: '#164E63', blush: '#F9A8D4' },\n { id: 'rose', bodyFrom: '#FDA4AF', bodyTo: '#F43F5E', accent: '#FFE4E6', ink: '#881337', blush: '#FECDD3' },\n { id: 'lime', bodyFrom: '#BEF264', bodyTo: '#84CC16', accent: '#F7FEE7', ink: '#365314', blush: '#FCA5A5' },\n { id: 'peach', bodyFrom: '#FDBA74', bodyTo: '#F97316', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'teal', bodyFrom: '#5EEAD4', bodyTo: '#14B8A6', accent: '#F0FDFA', ink: '#134E4A', blush: '#FBCFE8' },\n { id: 'sand', bodyFrom: '#FDE68A', bodyTo: '#EAB308', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'plum', bodyFrom: '#D8B4FE', bodyTo: '#9333EA', accent: '#F5F3FF', ink: '#3B0764', blush: '#F0ABFC' },\n { id: 'coral', bodyFrom: '#FCA5A5', bodyTo: '#EF4444', accent: '#FEF2F2', ink: '#7F1D1D', blush: '#FECACA' },\n { id: 'forest', bodyFrom: '#86EFAC', bodyTo: '#16A34A', accent: '#F0FDF4', ink: '#14532D', blush: '#FBCFE8' },\n { id: 'slate', bodyFrom: '#CBD5E1', bodyTo: '#64748B', accent: '#F8FAFC', ink: '#0F172A', blush: '#FBCFE8' },\n { id: 'fuchsia', bodyFrom: '#F0ABFC', bodyTo: '#D946EF', accent: '#FDF4FF', ink: '#701A75', blush: '#FBCFE8' },\n // v0.4 additions — broader brand fit\n { id: 'terracotta', bodyFrom: '#FBBF9C', bodyTo: '#C2410C', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'navy', bodyFrom: '#93C5FD', bodyTo: '#1E3A8A', accent: '#EFF6FF', ink: '#172554', blush: '#FBCFE8' },\n { id: 'lavender', bodyFrom: '#DDD6FE', bodyTo: '#7C3AED', accent: '#F5F3FF', ink: '#3B0764', blush: '#F5D0FE' },\n { id: 'charcoal', bodyFrom: '#9CA3AF', bodyTo: '#374151', accent: '#F9FAFB', ink: '#030712', blush: '#FBCFE8' },\n { id: 'butter', bodyFrom: '#FEF9C3', bodyTo: '#FACC15', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'aqua', bodyFrom: '#A5F3FC', bodyTo: '#0891B2', accent: '#ECFEFF', ink: '#083344', blush: '#FBCFE8' },\n];\n\nexport const PALETTE_BY_ID: Record<string, Palette> = Object.fromEntries(\n PALETTES.map((p) => [p.id, p]),\n);\n","import type { BodyShapeId } from '../types.js';\n\n/**\n * Face anchors define where features attach for each body silhouette.\n *\n * Without anchors, every body wears the same face at the same coordinates and\n * the avatar reads as \"AI-generated.\" With anchors, a tall egg-shaped body has\n * a higher, narrower face than a squat mushroom-shaped one, and antenna mounts\n * follow each silhouette's actual apex.\n *\n * All coordinates are in the 100x100 viewBox.\n */\nexport interface FaceAnchor {\n /** Center of the face for symmetry math. */\n cx: number;\n /** Vertical line where eyes sit. */\n eyeY: number;\n /** Horizontal distance from cx to each eye center. */\n eyeOffset: number;\n /** Vertical eye size scale (1.0 = baseline). */\n eyeScale: number;\n /** Vertical line where the mouth sits. */\n mouthY: number;\n /** Mouth horizontal half-width (smile arc spans cx ± this). */\n mouthSpan: number;\n /** Where the antenna / topper mounts on the body. */\n topperX: number;\n topperY: number;\n /** Body's lowest point — used by ground shadow. */\n groundY: number;\n /** Body's leftmost / rightmost extents at the eye line — for cheek blush placement. */\n cheekY: number;\n cheekOffset: number;\n}\n\nexport const ANCHORS: Record<BodyShapeId, FaceAnchor> = {\n orb: {\n cx: 50, eyeY: 52, eyeOffset: 10, eyeScale: 1.0,\n mouthY: 62, mouthSpan: 7,\n topperX: 50, topperY: 22,\n groundY: 86,\n cheekY: 58, cheekOffset: 18,\n },\n tall: {\n cx: 50, eyeY: 49, eyeOffset: 8, eyeScale: 1.05,\n mouthY: 60, mouthSpan: 6,\n topperX: 50, topperY: 18,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n squat: {\n cx: 50, eyeY: 56, eyeOffset: 11, eyeScale: 0.95,\n mouthY: 66, mouthSpan: 8,\n topperX: 50, topperY: 30,\n groundY: 86,\n cheekY: 62, cheekOffset: 20,\n },\n pear: {\n cx: 50, eyeY: 51, eyeOffset: 9, eyeScale: 1.0,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 24,\n groundY: 90,\n cheekY: 57, cheekOffset: 15,\n },\n pebble: {\n cx: 50, eyeY: 54, eyeOffset: 10.5, eyeScale: 1.0,\n mouthY: 63, mouthSpan: 7.5,\n topperX: 53, topperY: 23,\n groundY: 85,\n cheekY: 59, cheekOffset: 19,\n },\n dumpling: {\n cx: 50, eyeY: 58, eyeOffset: 11, eyeScale: 0.98,\n mouthY: 68, mouthSpan: 8,\n topperX: 50, topperY: 32,\n groundY: 88,\n cheekY: 64, cheekOffset: 21,\n },\n taro: {\n cx: 50, eyeY: 50, eyeOffset: 9, eyeScale: 1.02,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 14,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n wisp: {\n cx: 50, eyeY: 47, eyeOffset: 7.5, eyeScale: 1.08,\n mouthY: 58, mouthSpan: 5.5,\n topperX: 50, topperY: 12,\n groundY: 94,\n cheekY: 53, cheekOffset: 12,\n },\n};\n","import type { BodyShapeId, Palette } from '../types.js';\nimport { ANCHORS, type FaceAnchor } from './anchor.js';\n\n/**\n * Body silhouettes as SVG paths.\n *\n * Each shape is hand-tuned so the silhouettes read as distinct creatures of\n * the same species — different proportions, not just stretched ellipses.\n * Paths are pre-baked rather than generated so they can be replaced 1:1 by an\n * illustrator's exports without touching the renderer.\n */\n\nconst BODY_PATHS: Record<BodyShapeId, string> = {\n // Orb — true round, slight under-bulge for grounded feel\n orb: 'M50 20 C72 20 84 36 84 54 C84 73 70 86 50 86 C30 86 16 73 16 54 C16 36 28 20 50 20 Z',\n\n // Tall — egg pointing up, narrow shoulders, fuller bottom\n tall: 'M50 15 C66 15 74 30 74 48 C74 70 66 91 50 91 C34 91 26 70 26 48 C26 30 34 15 50 15 Z',\n\n // Squat — wide mushroom cap, low waist\n squat: 'M50 28 C74 28 88 42 88 60 C88 78 74 86 50 86 C26 86 12 78 12 60 C12 42 26 28 50 28 Z',\n\n // Pear — narrow top, broad rounded bottom\n pear: 'M50 18 C62 18 70 32 70 46 C70 56 80 66 80 76 C80 86 68 90 50 90 C32 90 20 86 20 76 C20 66 30 56 30 46 C30 32 38 18 50 18 Z',\n\n // Pebble — asymmetric river stone, slight tilt right\n pebble: 'M52 19 C72 21 86 36 84 56 C82 73 68 85 50 85 C30 85 16 72 16 54 C16 35 32 17 52 19 Z',\n\n // Dumpling — round bottom-heavy, narrow shoulders, sits low\n dumpling: 'M50 30 C62 30 70 38 70 48 C70 56 78 64 80 72 C82 82 70 88 50 88 C30 88 18 82 20 72 C22 64 30 56 30 48 C30 38 38 30 50 30 Z',\n\n // Taro — gourd shape: small head bulge, fuller bottom\n taro: 'M50 14 C58 14 64 22 64 30 C64 36 60 40 60 46 C60 54 76 60 78 76 C80 88 66 91 50 91 C34 91 20 88 22 76 C24 60 40 54 40 46 C40 40 36 36 36 30 C36 22 42 14 50 14 Z',\n\n // Wisp — tall narrow body, slight bottom flare, ghost-like\n wisp: 'M50 12 C60 12 66 24 66 40 C66 60 74 78 70 90 C64 96 36 96 30 90 C26 78 34 60 34 40 C34 24 40 12 50 12 Z',\n};\n\nexport function bodyAnchor(id: BodyShapeId): FaceAnchor {\n return ANCHORS[id];\n}\n\nexport function renderBodyDefs(_id: BodyShapeId, _palette: Palette, gradId: string): string {\n return `\n<radialGradient id=\"${gradId}\" cx=\"42%\" cy=\"32%\" r=\"68%\">\n <stop offset=\"0%\" stop-color=\"${_palette.bodyFrom}\" />\n <stop offset=\"100%\" stop-color=\"${_palette.bodyTo}\" />\n</radialGradient>`.trim();\n}\n\nexport function renderBody(id: BodyShapeId, palette: Palette, gradId: string): string {\n const d = BODY_PATHS[id];\n const a = ANCHORS[id];\n const outlineColor = withAlpha(palette.ink, 0.18);\n\n return [\n // Ground shadow — soft ellipse just below body, grounds the figure\n `<ellipse cx=\"${a.cx}\" cy=\"${a.groundY + 4}\" rx=\"22\" ry=\"2.6\" fill=\"${palette.ink}\" opacity=\"0.16\" />`,\n // Body fill\n `<path d=\"${d}\" fill=\"url(#${gradId})\" stroke=\"${outlineColor}\" stroke-width=\"0.7\" />`,\n // Sheen — small light spot upper-left, scaled to body\n `<ellipse cx=\"${a.cx - 12}\" cy=\"${a.eyeY - 14}\" rx=\"11\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.22\" transform=\"rotate(-18 ${a.cx - 12} ${a.eyeY - 14})\" />`,\n ].join('');\n}\n\n/** Inline rgba() from hex — keeps SVG self-contained. */\nfunction withAlpha(hex: string, alpha: number): string {\n const h = hex.replace('#', '');\n const v = h.length === 3 ? h.split('').map((c) => c + c).join('') : h;\n const part = v.slice(0, 6);\n const r = parseInt(part.slice(0, 2), 16);\n const g = parseInt(part.slice(2, 4), 16);\n const b = parseInt(part.slice(4, 6), 16);\n return `rgba(${r},${g},${b},${alpha})`;\n}\n","import type { EyeStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Eyes consume the FaceAnchor: position, gap, and vertical scale all flex\n * with the body silhouette. Style id determines shape only.\n */\nexport function renderEyes(id: EyeStyleId, palette: Palette, anchor: FaceAnchor): string {\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const s = anchor.eyeScale;\n const ink = palette.ink;\n\n switch (id) {\n case 'round':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n sclera(rx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n pupil(rx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n glint(rx + 1, y - 1),\n ].join('');\n\n case 'wide':\n return [\n sclera(lx, y, 5 * s, 5.5 * s),\n sclera(rx, y, 5 * s, 5.5 * s),\n pupil(lx, y + 0.5, 3 * s, ink),\n pupil(rx, y + 0.5, 3 * s, ink),\n glint(lx + 1.2, y - 0.5),\n glint(rx + 1.2, y - 0.5),\n ].join('');\n\n case 'squint':\n return [\n arc(lx - 4.5, y, lx, y - 3.5, lx + 4.5, y, ink, 1.8),\n arc(rx - 4.5, y, rx, y - 3.5, rx + 4.5, y, ink, 1.8),\n ].join('');\n\n case 'wink':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n arc(rx - 4, y, rx, y - 3.5, rx + 4, y, ink, 1.8),\n ].join('');\n\n case 'sleepy':\n return [\n // Heavier upper lid — half-closed\n `<path d=\"M${lx - 4} ${y - 0.5} Q${lx} ${y + 2} ${lx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"1.7\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${rx - 4} ${y - 0.5} Q${rx} ${y + 2} ${rx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"1.7\" stroke-linecap=\"round\" fill=\"none\" />`,\n // tiny visible pupils\n `<circle cx=\"${lx}\" cy=\"${y + 0.5}\" r=\"0.9\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y + 0.5}\" r=\"0.9\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'star':\n return [starEye(lx, y, ink), starEye(rx, y, ink)].join('');\n\n case 'heart':\n return [heartEye(lx, y, ink), heartEye(rx, y, ink)].join('');\n\n case 'oval':\n // Vertical oval pupils (cute, anime-ish)\n return [\n sclera(lx, y, 4.5 * s, 5 * s),\n sclera(rx, y, 4.5 * s, 5 * s),\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n glint(lx + 0.8, y - 1.5),\n glint(rx + 0.8, y - 1.5),\n ].join('');\n\n case 'dot':\n // Minimal dot eyes\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${1.4 * s}\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${1.4 * s}\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'cross':\n // X eyes (cartoon \"knocked out\" — works for laughing too)\n return [crossEye(lx, y, ink), crossEye(rx, y, ink)].join('');\n }\n}\n\nfunction heartEye(cx: number, cy: number, color: string): string {\n // Two small circles + triangle below = heart silhouette\n const s = 2;\n return `<path d=\"M${cx} ${cy + s * 1.4} L${cx - s * 1.8} ${cy - s * 0.2} A${s} ${s} 0 0 1 ${cx} ${cy - s * 0.6} A${s} ${s} 0 0 1 ${cx + s * 1.8} ${cy - s * 0.2} Z\" fill=\"${color}\" />`;\n}\n\nfunction crossEye(cx: number, cy: number, color: string): string {\n const s = 2.4;\n return `<g stroke=\"${color}\" stroke-width=\"1.6\" stroke-linecap=\"round\"><line x1=\"${cx - s}\" y1=\"${cy - s}\" x2=\"${cx + s}\" y2=\"${cy + s}\" /><line x1=\"${cx - s}\" y1=\"${cy + s}\" x2=\"${cx + s}\" y2=\"${cy - s}\" /></g>`;\n}\n\nfunction sclera(cx: number, cy: number, rx: number, ry: number): string {\n return `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#FFFFFF\" />`;\n}\n\nfunction pupil(cx: number, cy: number, r: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r}\" fill=\"${color}\" />`;\n}\n\nfunction glint(cx: number, cy: number): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.8\" fill=\"#FFFFFF\" />`;\n}\n\nfunction arc(x1: number, y1: number, cx: number, cy: number, x2: number, y2: number, stroke: string, width: number): string {\n return `<path d=\"M${x1} ${y1} Q${cx} ${cy} ${x2} ${y2}\" stroke=\"${stroke}\" stroke-width=\"${width}\" stroke-linecap=\"round\" fill=\"none\" />`;\n}\n\nfunction starEye(cx: number, cy: number, color: string): string {\n const s = 3;\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.35} ${cy - s * 0.35} L${cx + s} ${cy} L${cx + s * 0.35} ${cy + s * 0.35} L${cx} ${cy + s} L${cx - s * 0.35} ${cy + s * 0.35} L${cx - s} ${cy} L${cx - s * 0.35} ${cy - s * 0.35} Z\" fill=\"${color}\" />`;\n}\n","import type { MouthStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderMouth(id: MouthStyleId, palette: Palette, anchor: FaceAnchor, curveScale = 1): string {\n const cx = anchor.cx;\n const y = anchor.mouthY;\n const w = anchor.mouthSpan * curveScale;\n const ink = palette.ink;\n\n switch (id) {\n case 'smile':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'grin':\n return `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 7} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'open':\n return [\n `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 9} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"${ink}\" fill-opacity=\"0.55\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${y + 3}\" rx=\"${w * 0.55}\" ry=\"1.8\" fill=\"#F472B6\" opacity=\"0.75\" />`,\n ].join('');\n case 'flat':\n return `<path d=\"M${cx - w + 1} ${y} L${cx + w - 1} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'smirk':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 3} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'awe':\n return `<ellipse cx=\"${cx}\" cy=\"${y + 1}\" rx=\"${w * 0.45}\" ry=\"3.2\" fill=\"${ink}\" opacity=\"0.85\" />`;\n\n case 'tongue':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 6} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx - 2} ${y + 4} Q${cx} ${y + 9} ${cx + 2} ${y + 4} Z\" fill=\"#F472B6\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tooth':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<rect x=\"${cx - 1.2}\" y=\"${y + 0.4}\" width=\"2.4\" height=\"2.6\" rx=\"0.4\" fill=\"#FFFFFF\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'wave':\n // Wavy mouth (silly / playful)\n return `<path d=\"M${cx - w} ${y + 1} Q${cx - w / 2} ${y - 1.5} ${cx} ${y + 1} Q${cx + w / 2} ${y + 3.5} ${cx + w} ${y + 1}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n\n case 'dot':\n // Tiny dot mouth (cute, minimalist)\n return `<circle cx=\"${cx}\" cy=\"${y + 1}\" r=\"1.2\" fill=\"${ink}\" />`;\n }\n}\n","import type { AntennaStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Antenna mounts at anchor.topperX / topperY (body's apex).\n */\nexport function renderAntenna(id: AntennaStyleId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const color = palette.accent;\n const ink = palette.ink;\n\n switch (id) {\n case 'classic':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 1} ${topY - 5} ${cx + 2.5} ${topY - 9}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 2.5}\" cy=\"${topY - 10}\" r=\"2.6\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'curl':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 6} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx - 4} ${topY - 11} ${cx + 1} ${topY - 14}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 1}\" cy=\"${topY - 14}\" r=\"2.2\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'double':\n return [\n `<path d=\"M${cx - 4} ${topY} Q${cx - 5} ${topY - 4} ${cx - 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<path d=\"M${cx + 4} ${topY} Q${cx + 5} ${topY - 4} ${cx + 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx - 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n `<circle class=\"spark\" cx=\"${cx + 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n ].join('');\n case 'spike':\n return [\n `<path class=\"spark\" d=\"M${cx - 2.5} ${topY - 1} L${cx + 1} ${topY - 11} L${cx + 4.5} ${topY - 1} Z\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n }\n}\n","import type { AccessoryId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderAccessory(id: AccessoryId, palette: Palette, anchor: FaceAnchor): string {\n switch (id) {\n case 'none':\n return '';\n case 'blush': {\n const lx = anchor.cx - anchor.cheekOffset;\n const rx = anchor.cx + anchor.cheekOffset;\n const y = anchor.cheekY;\n return [\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n ].join('');\n }\n case 'freckles': {\n const lx = anchor.cx - 8;\n const rx = anchor.cx + 8;\n const y = anchor.cheekY;\n return [\n dot(lx, y, palette.ink),\n dot(lx + 3, y + 1.5, palette.ink),\n dot(rx, y, palette.ink),\n dot(rx - 3, y + 1.5, palette.ink),\n ].join('');\n }\n case 'sparkle':\n return [\n sparkle(76, anchor.eyeY - 18, 3, palette),\n sparkle(24, anchor.eyeY - 16, 2.5, palette),\n sparkle(82, anchor.cheekY + 2, 2, palette),\n ].join('');\n\n case 'glasses': {\n // Round-frame glasses over both eyes\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const r = 6;\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n `<line x1=\"${lx + r}\" y1=\"${y}\" x2=\"${rx - r}\" y2=\"${y}\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n // subtle lens fill\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n ].join('');\n }\n\n case 'eyepatch': {\n // Patch over right eye, strap across head\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n return [\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"6\" ry=\"5.2\" fill=\"${palette.ink}\" />`,\n `<path d=\"M${rx - 6} ${y - 4} L${anchor.cx - 18} ${anchor.eyeY - 8}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n `<path d=\"M${rx + 6} ${y - 3} L${anchor.cx + 22} ${anchor.eyeY - 6}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n ].join('');\n }\n\n case 'mole': {\n // Small beauty mark below left cheek\n return `<circle cx=\"${anchor.cx - anchor.cheekOffset * 0.6}\" cy=\"${anchor.cheekY + 2}\" r=\"0.9\" fill=\"${palette.ink}\" />`;\n }\n }\n\n function dot(cx: number, cy: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.85\" fill=\"${color}\" opacity=\"0.55\" />`;\n }\n\n function sparkle(cx: number, cy: number, s: number, p: Palette): string {\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.3} ${cy - s * 0.3} L${cx + s} ${cy} L${cx + s * 0.3} ${cy + s * 0.3} L${cx} ${cy + s} L${cx - s * 0.3} ${cy + s * 0.3} L${cx - s} ${cy} L${cx - s * 0.3} ${cy - s * 0.3} Z\" fill=\"${p.accent}\" stroke=\"${p.ink}\" stroke-width=\"0.3\" opacity=\"0.9\" />`;\n }\n}\n","import type { BackgroundId, Palette } from '../types.js';\n\nexport function renderBackground(id: BackgroundId, palette: Palette, override?: string): string {\n const color = override ?? palette.bodyFrom;\n switch (id) {\n case 'none':\n return '';\n case 'solid':\n return `<rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"${color}\" opacity=\"0.18\" />`;\n case 'ring':\n return [\n `<circle cx=\"50\" cy=\"50\" r=\"48\" fill=\"${color}\" opacity=\"0.14\" />`,\n `<circle cx=\"50\" cy=\"50\" r=\"46\" fill=\"none\" stroke=\"${palette.accent}\" stroke-width=\"0.6\" opacity=\"0.4\" />`,\n ].join('');\n }\n}\n","import type { Palette, TopperId } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Topper = the layer that sits behind/above the body silhouette: ears, horns,\n * tufts, caps. This is independent from antenna (which is a small spark).\n * Toppers significantly increase identity diversity.\n */\nexport function renderTopper(id: TopperId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const ink = palette.ink;\n\n switch (id) {\n case 'ears':\n // Pointy ears flanking the apex\n return [\n `<path d=\"M${cx - 16} ${topY + 6} L${cx - 11} ${topY - 5} L${cx - 6} ${topY + 8} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 6} ${topY + 8} L${cx + 11} ${topY - 5} L${cx + 16} ${topY + 6} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n // inner ear blush\n `<path d=\"M${cx - 14} ${topY + 4} L${cx - 11} ${topY - 1} L${cx - 8} ${topY + 5} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n `<path d=\"M${cx + 8} ${topY + 5} L${cx + 11} ${topY - 1} L${cx + 14} ${topY + 4} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n ].join('');\n\n case 'roundEars':\n return [\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n ].join('');\n\n case 'horn':\n // Single short horn off-center\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx} ${topY - 6} ${cx + 4} ${topY - 10} Q${cx + 6} ${topY - 4} ${cx + 3} ${topY + 2} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'horns':\n // Two stubby horns\n return [\n `<path d=\"M${cx - 7} ${topY + 4} Q${cx - 8} ${topY - 4} ${cx - 4} ${topY - 7} Q${cx - 2} ${topY - 1} ${cx - 3} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<path d=\"M${cx + 3} ${topY + 4} Q${cx + 2} ${topY - 1} ${cx + 4} ${topY - 7} Q${cx + 8} ${topY - 4} ${cx + 7} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tuft':\n // Hair tuft / single curl\n return [\n `<path d=\"M${cx} ${topY + 2} Q${cx - 2} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx + 6} ${topY - 5} ${cx + 4} ${topY + 1} Z\" fill=\"${ink}\" opacity=\"0.85\" />`,\n ].join('');\n\n case 'cap':\n // Beanie / cap\n return [\n `<path d=\"M${cx - 16} ${topY + 6} Q${cx - 16} ${topY - 8} ${cx} ${topY - 8} Q${cx + 16} ${topY - 8} ${cx + 16} ${topY + 6} Z\" fill=\"${palette.ink}\" opacity=\"0.92\" />`,\n `<rect x=\"${cx - 16}\" y=\"${topY + 5}\" width=\"32\" height=\"2.5\" rx=\"1\" fill=\"${palette.accent}\" opacity=\"0.85\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 9}\" r=\"2.2\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'leaf':\n // Small leaf sprig — wholesome\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx - 6} ${topY - 4} ${cx - 1} ${topY - 8} Q${cx + 3} ${topY - 4} ${cx - 1} ${topY + 2} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.4\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 1} ${topY + 2} Q${cx + 5} ${topY - 2} ${cx + 6} ${topY - 6}\" stroke=\"#16A34A\" stroke-width=\"1\" fill=\"none\" stroke-linecap=\"round\" />`,\n ].join('');\n\n case 'headband':\n // Sweatband across forehead\n return [\n `<path d=\"M${cx - 18} ${topY + 8} Q${cx} ${topY + 2} ${cx + 18} ${topY + 8} L${cx + 18} ${topY + 12} Q${cx} ${topY + 6} ${cx - 18} ${topY + 12} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<rect x=\"${cx - 2}\" y=\"${topY + 4}\" width=\"4\" height=\"4\" rx=\"1\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'halo':\n // Floating ring above head\n return [\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"11\" ry=\"2.5\" fill=\"none\" stroke=\"#FACC15\" stroke-width=\"2\" opacity=\"0.95\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"8.5\" ry=\"1.6\" fill=\"none\" stroke=\"#FDE68A\" stroke-width=\"0.6\" opacity=\"0.7\" />`,\n ].join('');\n\n case 'crown':\n // Three-point crown\n return [\n `<path d=\"M${cx - 11} ${topY + 4} L${cx - 11} ${topY - 4} L${cx - 6} ${topY + 1} L${cx} ${topY - 7} L${cx + 6} ${topY + 1} L${cx + 11} ${topY - 4} L${cx + 11} ${topY + 4} Z\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<circle cx=\"${cx - 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 7}\" r=\"1.6\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx + 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n ].join('');\n\n case 'antlers':\n // Branching antlers\n return [\n `<path d=\"M${cx - 5} ${topY + 4} L${cx - 6} ${topY - 4} M${cx - 6} ${topY - 4} L${cx - 10} ${topY - 6} M${cx - 6} ${topY - 4} L${cx - 6} ${topY - 9} M${cx - 6} ${topY - 9} L${cx - 8} ${topY - 11} M${cx - 6} ${topY - 9} L${cx - 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx + 5} ${topY + 4} L${cx + 6} ${topY - 4} M${cx + 6} ${topY - 4} L${cx + 10} ${topY - 6} M${cx + 6} ${topY - 4} L${cx + 6} ${topY - 9} M${cx + 6} ${topY - 9} L${cx + 8} ${topY - 11} M${cx + 6} ${topY - 9} L${cx + 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n ].join('');\n }\n}\n","export * from './palette.js';\nexport * from './body.js';\nexport * from './eyes.js';\nexport * from './mouth.js';\nexport * from './antenna.js';\nexport * from './accessory.js';\nexport * from './background.js';\nexport * from './topper.js';\nexport * from './anchor.js';\n\nimport type {\n AccessoryId,\n AntennaStyleId,\n BackgroundId,\n BodyShapeId,\n EyeStyleId,\n MouthStyleId,\n TopperId,\n} from '../types.js';\n\nexport const BODY_IDS: readonly BodyShapeId[] = [\n 'orb', 'tall', 'squat', 'pear', 'pebble',\n 'dumpling', 'taro', 'wisp',\n];\nexport const EYE_IDS: readonly EyeStyleId[] = [\n 'round', 'wide', 'squint', 'wink', 'sleepy', 'star',\n 'heart', 'oval', 'dot', 'cross',\n];\nexport const MOUTH_IDS: readonly MouthStyleId[] = [\n 'smile', 'grin', 'open', 'flat', 'smirk', 'awe',\n 'tongue', 'tooth', 'wave', 'dot',\n];\nexport const ANTENNA_IDS: readonly AntennaStyleId[] = ['none', 'classic', 'curl', 'double', 'spike'];\nexport const ACCESSORY_IDS: readonly AccessoryId[] = [\n 'none', 'blush', 'freckles', 'sparkle',\n 'glasses', 'eyepatch', 'mole',\n];\nexport const BACKGROUND_IDS: readonly BackgroundId[] = ['none', 'solid', 'ring'];\nexport const TOPPER_IDS: readonly TopperId[] = [\n // 'none' weighted ~2× so plain-headed avatars stay common\n 'none', 'none', 'ears', 'roundEars', 'horn', 'horns', 'tuft', 'cap', 'leaf',\n 'headband', 'halo', 'crown', 'antlers',\n];\n"]}
1
+ {"version":3,"sources":["../src/parts/palette.ts","../src/parts/anchor.ts","../src/parts/body.ts","../src/parts/eyes.ts","../src/parts/mouth.ts","../src/parts/antenna.ts","../src/parts/accessory.ts","../src/parts/background.ts","../src/parts/topper.ts","../src/parts/outfit.ts","../src/parts/index.ts"],"names":[],"mappings":"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","file":"parts.js","sourcesContent":["import type { Palette } from '../types.js';\n\n/**\n * Palette set seeded from the Comms360 \"Pulse\" mascot DNA, extended to provide\n * enough hue variety for identity-level differentiation across many users.\n *\n * `bodyFrom`/`bodyTo` feed the radial gradient. `ink` is the line/face color\n * (dark complement of the body). `accent` is used for antenna sparks and other\n * highlights. `blush` is the cheek tint.\n */\nexport const PALETTES: readonly Palette[] = [\n { id: 'indigo', bodyFrom: '#818CF8', bodyTo: '#6366F1', accent: '#FFFFFF', ink: '#1E1B4B', blush: '#F9A8D4' },\n { id: 'mint', bodyFrom: '#6EE7B7', bodyTo: '#34D399', accent: '#ECFDF5', ink: '#064E3B', blush: '#FBCFE8' },\n { id: 'amber', bodyFrom: '#FCD34D', bodyTo: '#F59E0B', accent: '#FFF7ED', ink: '#78350F', blush: '#FB7185' },\n { id: 'sky', bodyFrom: '#93C5FD', bodyTo: '#3B82F6', accent: '#FFFFFF', ink: '#1E3A8A', blush: '#F9A8D4' },\n { id: 'violet', bodyFrom: '#C084FC', bodyTo: '#A855F7', accent: '#FAE8FF', ink: '#4C1D95', blush: '#F472B6' },\n { id: 'cyan', bodyFrom: '#67E8F9', bodyTo: '#06B6D4', accent: '#ECFEFF', ink: '#164E63', blush: '#F9A8D4' },\n { id: 'rose', bodyFrom: '#FDA4AF', bodyTo: '#F43F5E', accent: '#FFE4E6', ink: '#881337', blush: '#FECDD3' },\n { id: 'lime', bodyFrom: '#BEF264', bodyTo: '#84CC16', accent: '#F7FEE7', ink: '#365314', blush: '#FCA5A5' },\n { id: 'peach', bodyFrom: '#FDBA74', bodyTo: '#F97316', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'teal', bodyFrom: '#5EEAD4', bodyTo: '#14B8A6', accent: '#F0FDFA', ink: '#134E4A', blush: '#FBCFE8' },\n { id: 'sand', bodyFrom: '#FDE68A', bodyTo: '#EAB308', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'plum', bodyFrom: '#D8B4FE', bodyTo: '#9333EA', accent: '#F5F3FF', ink: '#3B0764', blush: '#F0ABFC' },\n { id: 'coral', bodyFrom: '#FCA5A5', bodyTo: '#EF4444', accent: '#FEF2F2', ink: '#7F1D1D', blush: '#FECACA' },\n { id: 'forest', bodyFrom: '#86EFAC', bodyTo: '#16A34A', accent: '#F0FDF4', ink: '#14532D', blush: '#FBCFE8' },\n { id: 'slate', bodyFrom: '#CBD5E1', bodyTo: '#64748B', accent: '#F8FAFC', ink: '#0F172A', blush: '#FBCFE8' },\n { id: 'fuchsia', bodyFrom: '#F0ABFC', bodyTo: '#D946EF', accent: '#FDF4FF', ink: '#701A75', blush: '#FBCFE8' },\n // v0.4 additions — broader brand fit\n { id: 'terracotta', bodyFrom: '#FBBF9C', bodyTo: '#C2410C', accent: '#FFF7ED', ink: '#7C2D12', blush: '#FECACA' },\n { id: 'navy', bodyFrom: '#93C5FD', bodyTo: '#1E3A8A', accent: '#EFF6FF', ink: '#172554', blush: '#FBCFE8' },\n { id: 'lavender', bodyFrom: '#DDD6FE', bodyTo: '#7C3AED', accent: '#F5F3FF', ink: '#3B0764', blush: '#F5D0FE' },\n { id: 'charcoal', bodyFrom: '#9CA3AF', bodyTo: '#374151', accent: '#F9FAFB', ink: '#030712', blush: '#FBCFE8' },\n { id: 'butter', bodyFrom: '#FEF9C3', bodyTo: '#FACC15', accent: '#FEFCE8', ink: '#713F12', blush: '#FCA5A5' },\n { id: 'aqua', bodyFrom: '#A5F3FC', bodyTo: '#0891B2', accent: '#ECFEFF', ink: '#083344', blush: '#FBCFE8' },\n];\n\nexport const PALETTE_BY_ID: Record<string, Palette> = Object.fromEntries(\n PALETTES.map((p) => [p.id, p]),\n);\n","import type { BodyShapeId } from '../types.js';\n\n/**\n * Face anchors define where features attach for each body silhouette.\n *\n * Without anchors, every body wears the same face at the same coordinates and\n * the avatar reads as \"AI-generated.\" With anchors, a tall egg-shaped body has\n * a higher, narrower face than a squat mushroom-shaped one, and antenna mounts\n * follow each silhouette's actual apex.\n *\n * All coordinates are in the 100x100 viewBox.\n */\nexport interface FaceAnchor {\n /** Center of the face for symmetry math. */\n cx: number;\n /** Vertical line where eyes sit. */\n eyeY: number;\n /** Horizontal distance from cx to each eye center. */\n eyeOffset: number;\n /** Vertical eye size scale (1.0 = baseline). */\n eyeScale: number;\n /** Vertical line where the mouth sits. */\n mouthY: number;\n /** Mouth horizontal half-width (smile arc spans cx ± this). */\n mouthSpan: number;\n /** Where the antenna / topper mounts on the body. */\n topperX: number;\n topperY: number;\n /** Body's lowest point — used by ground shadow. */\n groundY: number;\n /** Body's leftmost / rightmost extents at the eye line — for cheek blush placement. */\n cheekY: number;\n cheekOffset: number;\n}\n\nexport const ANCHORS: Record<BodyShapeId, FaceAnchor> = {\n orb: {\n cx: 50, eyeY: 52, eyeOffset: 10, eyeScale: 1.0,\n mouthY: 62, mouthSpan: 7,\n topperX: 50, topperY: 22,\n groundY: 86,\n cheekY: 58, cheekOffset: 18,\n },\n tall: {\n cx: 50, eyeY: 49, eyeOffset: 8, eyeScale: 1.05,\n mouthY: 60, mouthSpan: 6,\n topperX: 50, topperY: 18,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n squat: {\n cx: 50, eyeY: 56, eyeOffset: 11, eyeScale: 0.95,\n mouthY: 66, mouthSpan: 8,\n topperX: 50, topperY: 30,\n groundY: 86,\n cheekY: 62, cheekOffset: 20,\n },\n pear: {\n cx: 50, eyeY: 51, eyeOffset: 9, eyeScale: 1.0,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 24,\n groundY: 90,\n cheekY: 57, cheekOffset: 15,\n },\n pebble: {\n cx: 50, eyeY: 54, eyeOffset: 10.5, eyeScale: 1.0,\n mouthY: 63, mouthSpan: 7.5,\n topperX: 53, topperY: 23,\n groundY: 85,\n cheekY: 59, cheekOffset: 19,\n },\n dumpling: {\n cx: 50, eyeY: 58, eyeOffset: 11, eyeScale: 0.98,\n mouthY: 68, mouthSpan: 8,\n topperX: 50, topperY: 32,\n groundY: 88,\n cheekY: 64, cheekOffset: 21,\n },\n taro: {\n cx: 50, eyeY: 50, eyeOffset: 9, eyeScale: 1.02,\n mouthY: 60, mouthSpan: 6.5,\n topperX: 50, topperY: 14,\n groundY: 91,\n cheekY: 55, cheekOffset: 14,\n },\n wisp: {\n cx: 50, eyeY: 47, eyeOffset: 7.5, eyeScale: 1.08,\n mouthY: 58, mouthSpan: 5.5,\n topperX: 50, topperY: 12,\n groundY: 94,\n cheekY: 53, cheekOffset: 12,\n },\n};\n","import type { BodyShapeId, Palette } from '../types.js';\nimport { ANCHORS, type FaceAnchor } from './anchor.js';\n\n/**\n * Body silhouettes as SVG paths.\n *\n * Each shape is hand-tuned so the silhouettes read as distinct creatures of\n * the same species — different proportions, not just stretched ellipses.\n * Paths are pre-baked rather than generated so they can be replaced 1:1 by an\n * illustrator's exports without touching the renderer.\n */\n\nconst BODY_PATHS: Record<BodyShapeId, string> = {\n // Orb — true round, slight under-bulge for grounded feel\n orb: 'M50 20 C72 20 84 36 84 54 C84 73 70 86 50 86 C30 86 16 73 16 54 C16 36 28 20 50 20 Z',\n\n // Tall — egg pointing up, narrow shoulders, fuller bottom\n tall: 'M50 15 C66 15 74 30 74 48 C74 70 66 91 50 91 C34 91 26 70 26 48 C26 30 34 15 50 15 Z',\n\n // Squat — wide mushroom cap, low waist\n squat: 'M50 28 C74 28 88 42 88 60 C88 78 74 86 50 86 C26 86 12 78 12 60 C12 42 26 28 50 28 Z',\n\n // Pear — narrow top, broad rounded bottom\n pear: 'M50 18 C62 18 70 32 70 46 C70 56 80 66 80 76 C80 86 68 90 50 90 C32 90 20 86 20 76 C20 66 30 56 30 46 C30 32 38 18 50 18 Z',\n\n // Pebble — asymmetric river stone, slight tilt right\n pebble: 'M52 19 C72 21 86 36 84 56 C82 73 68 85 50 85 C30 85 16 72 16 54 C16 35 32 17 52 19 Z',\n\n // Dumpling — round bottom-heavy, narrow shoulders, sits low\n dumpling: 'M50 30 C62 30 70 38 70 48 C70 56 78 64 80 72 C82 82 70 88 50 88 C30 88 18 82 20 72 C22 64 30 56 30 48 C30 38 38 30 50 30 Z',\n\n // Taro — gourd shape: small head bulge, fuller bottom\n taro: 'M50 14 C58 14 64 22 64 30 C64 36 60 40 60 46 C60 54 76 60 78 76 C80 88 66 91 50 91 C34 91 20 88 22 76 C24 60 40 54 40 46 C40 40 36 36 36 30 C36 22 42 14 50 14 Z',\n\n // Wisp — tall narrow body, slight bottom flare, ghost-like\n wisp: 'M50 12 C60 12 66 24 66 40 C66 60 74 78 70 90 C64 96 36 96 30 90 C26 78 34 60 34 40 C34 24 40 12 50 12 Z',\n};\n\nexport function bodyAnchor(id: BodyShapeId): FaceAnchor {\n return ANCHORS[id];\n}\n\nexport function renderBodyDefs(_id: BodyShapeId, _palette: Palette, gradId: string): string {\n return `\n<radialGradient id=\"${gradId}\" cx=\"42%\" cy=\"32%\" r=\"68%\">\n <stop offset=\"0%\" stop-color=\"${_palette.bodyFrom}\" />\n <stop offset=\"100%\" stop-color=\"${_palette.bodyTo}\" />\n</radialGradient>`.trim();\n}\n\nexport function renderBody(id: BodyShapeId, palette: Palette, gradId: string): string {\n const d = BODY_PATHS[id];\n const a = ANCHORS[id];\n const outlineColor = withAlpha(palette.ink, 0.18);\n\n return [\n // Ground shadow — soft ellipse just below body, grounds the figure\n `<ellipse cx=\"${a.cx}\" cy=\"${a.groundY + 4}\" rx=\"22\" ry=\"2.6\" fill=\"${palette.ink}\" opacity=\"0.16\" />`,\n // Body fill\n `<path d=\"${d}\" fill=\"url(#${gradId})\" stroke=\"${outlineColor}\" stroke-width=\"0.7\" />`,\n // Sheen — small light spot upper-left, scaled to body\n `<ellipse cx=\"${a.cx - 12}\" cy=\"${a.eyeY - 14}\" rx=\"11\" ry=\"7\" fill=\"#FFFFFF\" opacity=\"0.22\" transform=\"rotate(-18 ${a.cx - 12} ${a.eyeY - 14})\" />`,\n ].join('');\n}\n\n/** Inline rgba() from hex — keeps SVG self-contained. */\nfunction withAlpha(hex: string, alpha: number): string {\n const h = hex.replace('#', '');\n const v = h.length === 3 ? h.split('').map((c) => c + c).join('') : h;\n const part = v.slice(0, 6);\n const r = parseInt(part.slice(0, 2), 16);\n const g = parseInt(part.slice(2, 4), 16);\n const b = parseInt(part.slice(4, 6), 16);\n return `rgba(${r},${g},${b},${alpha})`;\n}\n","import type { EyeStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Eyes consume the FaceAnchor: position, gap, and vertical scale all flex\n * with the body silhouette. Style id determines shape only.\n */\nexport function renderEyes(id: EyeStyleId, palette: Palette, anchor: FaceAnchor): string {\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const s = anchor.eyeScale;\n const ink = palette.ink;\n\n switch (id) {\n case 'round':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n sclera(rx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n pupil(rx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n glint(rx + 1, y - 1),\n ].join('');\n\n case 'wide':\n return [\n sclera(lx, y, 5 * s, 5.5 * s),\n sclera(rx, y, 5 * s, 5.5 * s),\n pupil(lx, y + 0.5, 3 * s, ink),\n pupil(rx, y + 0.5, 3 * s, ink),\n glint(lx + 1.2, y - 0.5),\n glint(rx + 1.2, y - 0.5),\n ].join('');\n\n case 'squint':\n return [\n arc(lx - 4.5, y, lx, y - 3.5, lx + 4.5, y, ink, 1.8),\n arc(rx - 4.5, y, rx, y - 3.5, rx + 4.5, y, ink, 1.8),\n ].join('');\n\n case 'wink':\n return [\n sclera(lx, y, 4 * s, 4.5 * s),\n pupil(lx, y, 2.2 * s, ink),\n glint(lx + 1, y - 1),\n arc(rx - 4, y, rx, y - 3.5, rx + 4, y, ink, 1.8),\n ].join('');\n\n case 'sleepy':\n return [\n // Heavier upper lid — half-closed\n `<path d=\"M${lx - 4} ${y - 0.5} Q${lx} ${y + 2} ${lx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"1.7\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${rx - 4} ${y - 0.5} Q${rx} ${y + 2} ${rx + 4} ${y - 0.5}\" stroke=\"${ink}\" stroke-width=\"1.7\" stroke-linecap=\"round\" fill=\"none\" />`,\n // tiny visible pupils\n `<circle cx=\"${lx}\" cy=\"${y + 0.5}\" r=\"0.9\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y + 0.5}\" r=\"0.9\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'star':\n return [starEye(lx, y, ink), starEye(rx, y, ink)].join('');\n\n case 'heart':\n return [heartEye(lx, y, ink), heartEye(rx, y, ink)].join('');\n\n case 'oval':\n // Vertical oval pupils (cute, anime-ish)\n return [\n sclera(lx, y, 4.5 * s, 5 * s),\n sclera(rx, y, 4.5 * s, 5 * s),\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"${1.6 * s}\" ry=\"${3 * s}\" fill=\"${ink}\" />`,\n glint(lx + 0.8, y - 1.5),\n glint(rx + 0.8, y - 1.5),\n ].join('');\n\n case 'dot':\n // Minimal dot eyes\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${1.4 * s}\" fill=\"${ink}\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${1.4 * s}\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'cross':\n // X eyes (cartoon \"knocked out\" — works for laughing too)\n return [crossEye(lx, y, ink), crossEye(rx, y, ink)].join('');\n }\n}\n\nfunction heartEye(cx: number, cy: number, color: string): string {\n // Two small circles + triangle below = heart silhouette\n const s = 2;\n return `<path d=\"M${cx} ${cy + s * 1.4} L${cx - s * 1.8} ${cy - s * 0.2} A${s} ${s} 0 0 1 ${cx} ${cy - s * 0.6} A${s} ${s} 0 0 1 ${cx + s * 1.8} ${cy - s * 0.2} Z\" fill=\"${color}\" />`;\n}\n\nfunction crossEye(cx: number, cy: number, color: string): string {\n const s = 2.4;\n return `<g stroke=\"${color}\" stroke-width=\"1.6\" stroke-linecap=\"round\"><line x1=\"${cx - s}\" y1=\"${cy - s}\" x2=\"${cx + s}\" y2=\"${cy + s}\" /><line x1=\"${cx - s}\" y1=\"${cy + s}\" x2=\"${cx + s}\" y2=\"${cy - s}\" /></g>`;\n}\n\nfunction sclera(cx: number, cy: number, rx: number, ry: number): string {\n return `<ellipse cx=\"${cx}\" cy=\"${cy}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"#FFFFFF\" />`;\n}\n\nfunction pupil(cx: number, cy: number, r: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"${r}\" fill=\"${color}\" />`;\n}\n\nfunction glint(cx: number, cy: number): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.8\" fill=\"#FFFFFF\" />`;\n}\n\nfunction arc(x1: number, y1: number, cx: number, cy: number, x2: number, y2: number, stroke: string, width: number): string {\n return `<path d=\"M${x1} ${y1} Q${cx} ${cy} ${x2} ${y2}\" stroke=\"${stroke}\" stroke-width=\"${width}\" stroke-linecap=\"round\" fill=\"none\" />`;\n}\n\nfunction starEye(cx: number, cy: number, color: string): string {\n const s = 3;\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.35} ${cy - s * 0.35} L${cx + s} ${cy} L${cx + s * 0.35} ${cy + s * 0.35} L${cx} ${cy + s} L${cx - s * 0.35} ${cy + s * 0.35} L${cx - s} ${cy} L${cx - s * 0.35} ${cy - s * 0.35} Z\" fill=\"${color}\" />`;\n}\n","import type { MouthStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderMouth(id: MouthStyleId, palette: Palette, anchor: FaceAnchor, curveScale = 1): string {\n const cx = anchor.cx;\n const y = anchor.mouthY;\n const w = anchor.mouthSpan * curveScale;\n const ink = palette.ink;\n\n switch (id) {\n case 'smile':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'grin':\n return `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 7} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'open':\n return [\n `<path d=\"M${cx - w - 1} ${y - 2} Q${cx} ${y + 9} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"${ink}\" fill-opacity=\"0.55\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${y + 3}\" rx=\"${w * 0.55}\" ry=\"1.8\" fill=\"#F472B6\" opacity=\"0.75\" />`,\n ].join('');\n case 'flat':\n return `<path d=\"M${cx - w + 1} ${y} L${cx + w - 1} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'smirk':\n return `<path d=\"M${cx - w} ${y} Q${cx} ${y + 3} ${cx + w + 1} ${y - 2}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n case 'awe':\n return `<ellipse cx=\"${cx}\" cy=\"${y + 1}\" rx=\"${w * 0.45}\" ry=\"3.2\" fill=\"${ink}\" opacity=\"0.85\" />`;\n\n case 'tongue':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 6} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx - 2} ${y + 4} Q${cx} ${y + 9} ${cx + 2} ${y + 4} Z\" fill=\"#F472B6\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tooth':\n return [\n `<path d=\"M${cx - w} ${y} Q${cx} ${y + 5} ${cx + w} ${y}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<rect x=\"${cx - 1.2}\" y=\"${y + 0.4}\" width=\"2.4\" height=\"2.6\" rx=\"0.4\" fill=\"#FFFFFF\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'wave':\n // Wavy mouth (silly / playful)\n return `<path d=\"M${cx - w} ${y + 1} Q${cx - w / 2} ${y - 1.5} ${cx} ${y + 1} Q${cx + w / 2} ${y + 3.5} ${cx + w} ${y + 1}\" stroke=\"${ink}\" stroke-width=\"1.8\" stroke-linecap=\"round\" fill=\"none\" />`;\n\n case 'dot':\n // Tiny dot mouth (cute, minimalist)\n return `<circle cx=\"${cx}\" cy=\"${y + 1}\" r=\"1.2\" fill=\"${ink}\" />`;\n }\n}\n","import type { AntennaStyleId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Antenna mounts at anchor.topperX / topperY (body's apex).\n */\nexport function renderAntenna(id: AntennaStyleId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const color = palette.accent;\n const ink = palette.ink;\n\n switch (id) {\n case 'classic':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 1} ${topY - 5} ${cx + 2.5} ${topY - 9}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 2.5}\" cy=\"${topY - 10}\" r=\"2.6\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'curl':\n return [\n `<path d=\"M${cx} ${topY} Q${cx + 6} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx - 4} ${topY - 11} ${cx + 1} ${topY - 14}\" stroke=\"${ink}\" stroke-width=\"1.2\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx + 1}\" cy=\"${topY - 14}\" r=\"2.2\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n case 'double':\n return [\n `<path d=\"M${cx - 4} ${topY} Q${cx - 5} ${topY - 4} ${cx - 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<path d=\"M${cx + 4} ${topY} Q${cx + 5} ${topY - 4} ${cx + 5.5} ${topY - 8}\" stroke=\"${ink}\" stroke-width=\"1.1\" stroke-linecap=\"round\" fill=\"none\" opacity=\"0.55\" />`,\n `<circle class=\"spark\" cx=\"${cx - 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n `<circle class=\"spark\" cx=\"${cx + 5.5}\" cy=\"${topY - 9}\" r=\"2.1\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.5\" opacity=\"0.95\" />`,\n ].join('');\n case 'spike':\n return [\n `<path class=\"spark\" d=\"M${cx - 2.5} ${topY - 1} L${cx + 1} ${topY - 11} L${cx + 4.5} ${topY - 1} Z\" fill=\"${color}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n ].join('');\n }\n}\n","import type { AccessoryId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\nexport function renderAccessory(id: AccessoryId, palette: Palette, anchor: FaceAnchor): string {\n switch (id) {\n case 'none':\n return '';\n case 'blush': {\n const lx = anchor.cx - anchor.cheekOffset;\n const rx = anchor.cx + anchor.cheekOffset;\n const y = anchor.cheekY;\n return [\n `<ellipse cx=\"${lx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"3.6\" ry=\"2.2\" fill=\"${palette.blush}\" opacity=\"0.5\" />`,\n ].join('');\n }\n case 'freckles': {\n const lx = anchor.cx - 8;\n const rx = anchor.cx + 8;\n const y = anchor.cheekY;\n return [\n dot(lx, y, palette.ink),\n dot(lx + 3, y + 1.5, palette.ink),\n dot(rx, y, palette.ink),\n dot(rx - 3, y + 1.5, palette.ink),\n ].join('');\n }\n case 'sparkle':\n return [\n sparkle(76, anchor.eyeY - 18, 3, palette),\n sparkle(24, anchor.eyeY - 16, 2.5, palette),\n sparkle(82, anchor.cheekY + 2, 2, palette),\n ].join('');\n\n case 'glasses': {\n // Round-frame glasses over both eyes\n const lx = anchor.cx - anchor.eyeOffset;\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n const r = 6;\n return [\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r}\" fill=\"none\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n `<line x1=\"${lx + r}\" y1=\"${y}\" x2=\"${rx - r}\" y2=\"${y}\" stroke=\"${palette.ink}\" stroke-width=\"1.2\" />`,\n // subtle lens fill\n `<circle cx=\"${lx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n `<circle cx=\"${rx}\" cy=\"${y}\" r=\"${r - 1}\" fill=\"#FFFFFF\" opacity=\"0.18\" />`,\n ].join('');\n }\n\n case 'eyepatch': {\n // Patch over right eye, strap across head\n const rx = anchor.cx + anchor.eyeOffset;\n const y = anchor.eyeY;\n return [\n `<ellipse cx=\"${rx}\" cy=\"${y}\" rx=\"6\" ry=\"5.2\" fill=\"${palette.ink}\" />`,\n `<path d=\"M${rx - 6} ${y - 4} L${anchor.cx - 18} ${anchor.eyeY - 8}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n `<path d=\"M${rx + 6} ${y - 3} L${anchor.cx + 22} ${anchor.eyeY - 6}\" stroke=\"${palette.ink}\" stroke-width=\"0.9\" />`,\n ].join('');\n }\n\n case 'mole': {\n // Small beauty mark below left cheek\n return `<circle cx=\"${anchor.cx - anchor.cheekOffset * 0.6}\" cy=\"${anchor.cheekY + 2}\" r=\"0.9\" fill=\"${palette.ink}\" />`;\n }\n }\n\n function dot(cx: number, cy: number, color: string): string {\n return `<circle cx=\"${cx}\" cy=\"${cy}\" r=\"0.85\" fill=\"${color}\" opacity=\"0.55\" />`;\n }\n\n function sparkle(cx: number, cy: number, s: number, p: Palette): string {\n return `<path d=\"M${cx} ${cy - s} L${cx + s * 0.3} ${cy - s * 0.3} L${cx + s} ${cy} L${cx + s * 0.3} ${cy + s * 0.3} L${cx} ${cy + s} L${cx - s * 0.3} ${cy + s * 0.3} L${cx - s} ${cy} L${cx - s * 0.3} ${cy - s * 0.3} Z\" fill=\"${p.accent}\" stroke=\"${p.ink}\" stroke-width=\"0.3\" opacity=\"0.9\" />`;\n }\n}\n","import type { BackgroundId, Palette } from '../types.js';\n\nexport function renderBackground(id: BackgroundId, palette: Palette, override?: string): string {\n const color = override ?? palette.bodyFrom;\n switch (id) {\n case 'none':\n return '';\n case 'solid':\n return `<rect x=\"0\" y=\"0\" width=\"100\" height=\"100\" fill=\"${color}\" opacity=\"0.18\" />`;\n case 'ring':\n return [\n `<circle cx=\"50\" cy=\"50\" r=\"48\" fill=\"${color}\" opacity=\"0.14\" />`,\n `<circle cx=\"50\" cy=\"50\" r=\"46\" fill=\"none\" stroke=\"${palette.accent}\" stroke-width=\"0.6\" opacity=\"0.4\" />`,\n ].join('');\n }\n}\n","import type { Palette, TopperId } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Topper = the layer that sits behind/above the body silhouette: ears, horns,\n * tufts, caps. This is independent from antenna (which is a small spark).\n * Toppers significantly increase identity diversity.\n */\nexport function renderTopper(id: TopperId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n const cx = anchor.topperX;\n const topY = anchor.topperY;\n const ink = palette.ink;\n\n switch (id) {\n case 'ears':\n // Pointy ears flanking the apex\n return [\n `<path d=\"M${cx - 16} ${topY + 6} L${cx - 11} ${topY - 5} L${cx - 6} ${topY + 8} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 6} ${topY + 8} L${cx + 11} ${topY - 5} L${cx + 16} ${topY + 6} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" opacity=\"0.95\" />`,\n // inner ear blush\n `<path d=\"M${cx - 14} ${topY + 4} L${cx - 11} ${topY - 1} L${cx - 8} ${topY + 5} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n `<path d=\"M${cx + 8} ${topY + 5} L${cx + 11} ${topY - 1} L${cx + 14} ${topY + 4} Z\" fill=\"${palette.blush}\" opacity=\"0.65\" />`,\n ].join('');\n\n case 'roundEars':\n return [\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"6\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<circle cx=\"${cx - 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n `<circle cx=\"${cx + 13}\" cy=\"${topY + 2}\" r=\"3\" fill=\"${palette.blush}\" opacity=\"0.6\" />`,\n ].join('');\n\n case 'horn':\n // Single short horn off-center\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx} ${topY - 6} ${cx + 4} ${topY - 10} Q${cx + 6} ${topY - 4} ${cx + 3} ${topY + 2} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'horns':\n // Two stubby horns\n return [\n `<path d=\"M${cx - 7} ${topY + 4} Q${cx - 8} ${topY - 4} ${cx - 4} ${topY - 7} Q${cx - 2} ${topY - 1} ${cx - 3} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<path d=\"M${cx + 3} ${topY + 4} Q${cx + 2} ${topY - 1} ${cx + 4} ${topY - 7} Q${cx + 8} ${topY - 4} ${cx + 7} ${topY + 4} Z\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n ].join('');\n\n case 'tuft':\n // Hair tuft / single curl\n return [\n `<path d=\"M${cx} ${topY + 2} Q${cx - 2} ${topY - 4} ${cx + 1} ${topY - 8} Q${cx + 6} ${topY - 5} ${cx + 4} ${topY + 1} Z\" fill=\"${ink}\" opacity=\"0.85\" />`,\n ].join('');\n\n case 'cap':\n // Beanie / cap\n return [\n `<path d=\"M${cx - 16} ${topY + 6} Q${cx - 16} ${topY - 8} ${cx} ${topY - 8} Q${cx + 16} ${topY - 8} ${cx + 16} ${topY + 6} Z\" fill=\"${palette.ink}\" opacity=\"0.92\" />`,\n `<rect x=\"${cx - 16}\" y=\"${topY + 5}\" width=\"32\" height=\"2.5\" rx=\"1\" fill=\"${palette.accent}\" opacity=\"0.85\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 9}\" r=\"2.2\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'leaf':\n // Small leaf sprig — wholesome\n return [\n `<path d=\"M${cx - 1} ${topY + 2} Q${cx - 6} ${topY - 4} ${cx - 1} ${topY - 8} Q${cx + 3} ${topY - 4} ${cx - 1} ${topY + 2} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.4\" opacity=\"0.95\" />`,\n `<path d=\"M${cx + 1} ${topY + 2} Q${cx + 5} ${topY - 2} ${cx + 6} ${topY - 6}\" stroke=\"#16A34A\" stroke-width=\"1\" fill=\"none\" stroke-linecap=\"round\" />`,\n ].join('');\n\n case 'headband':\n // Sweatband across forehead\n return [\n `<path d=\"M${cx - 18} ${topY + 8} Q${cx} ${topY + 2} ${cx + 18} ${topY + 8} L${cx + 18} ${topY + 12} Q${cx} ${topY + 6} ${cx - 18} ${topY + 12} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n `<rect x=\"${cx - 2}\" y=\"${topY + 4}\" width=\"4\" height=\"4\" rx=\"1\" fill=\"${palette.accent}\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n ].join('');\n\n case 'halo':\n // Floating ring above head\n return [\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"11\" ry=\"2.5\" fill=\"none\" stroke=\"#FACC15\" stroke-width=\"2\" opacity=\"0.95\" />`,\n `<ellipse cx=\"${cx}\" cy=\"${topY - 6}\" rx=\"8.5\" ry=\"1.6\" fill=\"none\" stroke=\"#FDE68A\" stroke-width=\"0.6\" opacity=\"0.7\" />`,\n ].join('');\n\n case 'crown':\n // Three-point crown\n return [\n `<path d=\"M${cx - 11} ${topY + 4} L${cx - 11} ${topY - 4} L${cx - 6} ${topY + 1} L${cx} ${topY - 7} L${cx + 6} ${topY + 1} L${cx + 11} ${topY - 4} L${cx + 11} ${topY + 4} Z\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<circle cx=\"${cx - 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx}\" cy=\"${topY - 7}\" r=\"1.6\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n `<circle cx=\"${cx + 11}\" cy=\"${topY - 4}\" r=\"1.4\" fill=\"#EF4444\" stroke=\"${ink}\" stroke-width=\"0.3\" />`,\n ].join('');\n\n case 'antlers':\n // Branching antlers\n return [\n `<path d=\"M${cx - 5} ${topY + 4} L${cx - 6} ${topY - 4} M${cx - 6} ${topY - 4} L${cx - 10} ${topY - 6} M${cx - 6} ${topY - 4} L${cx - 6} ${topY - 9} M${cx - 6} ${topY - 9} L${cx - 8} ${topY - 11} M${cx - 6} ${topY - 9} L${cx - 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n `<path d=\"M${cx + 5} ${topY + 4} L${cx + 6} ${topY - 4} M${cx + 6} ${topY - 4} L${cx + 10} ${topY - 6} M${cx + 6} ${topY - 4} L${cx + 6} ${topY - 9} M${cx + 6} ${topY - 9} L${cx + 8} ${topY - 11} M${cx + 6} ${topY - 9} L${cx + 3} ${topY - 11}\" stroke=\"${ink}\" stroke-width=\"1.3\" stroke-linecap=\"round\" fill=\"none\" />`,\n ].join('');\n }\n}\n","import type { OutfitId, Palette } from '../types.js';\nimport type { FaceAnchor } from './anchor.js';\n\n/**\n * Outfit = chest/neck-area decoration that sits BELOW the face but on top\n * of the body silhouette. Anchored to the bottom-front of the body so it\n * reads as \"worn\", not \"floating\".\n *\n * Z-order: rendered AFTER body + face but BEFORE accessories (so a\n * sunflower boutonnière sits on top of the body but a sparkle accessory\n * can still hover above the chest).\n */\nexport function renderOutfit(id: OutfitId, anchor: FaceAnchor, palette: Palette): string {\n if (id === 'none') return '';\n\n // Chest anchor: centered horizontally on the body, vertically positioned\n // just below the chin (~70% down from mouth to ground).\n const cx = anchor.cx;\n const cy = anchor.mouthY + (anchor.groundY - anchor.mouthY) * 0.55;\n const ink = palette.ink;\n const accent = palette.accent;\n\n switch (id) {\n case 'collar':\n // Two short triangles meeting at center — dress shirt collar peek\n return [\n `<path d=\"M${cx - 9} ${cy} L${cx - 2} ${cy - 4} L${cx - 2} ${cy + 5} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n `<path d=\"M${cx + 9} ${cy} L${cx + 2} ${cy - 4} L${cx + 2} ${cy + 5} Z\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // tiny button at center\n `<circle cx=\"${cx}\" cy=\"${cy + 4}\" r=\"0.9\" fill=\"${ink}\" />`,\n ].join('');\n\n case 'scarf':\n // Wrap with two tails hanging\n return [\n // wrap band\n `<path d=\"M${cx - 14} ${cy - 2} Q${cx} ${cy + 3} ${cx + 14} ${cy - 2} L${cx + 14} ${cy + 3} Q${cx} ${cy + 8} ${cx - 14} ${cy + 3} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.6\" />`,\n // tail 1 (left)\n `<path d=\"M${cx - 6} ${cy + 5} L${cx - 9} ${cy + 12} L${cx - 4} ${cy + 12} L${cx - 2} ${cy + 5} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n // tail 2 (slightly right)\n `<path d=\"M${cx + 1} ${cy + 6} L${cx + 4} ${cy + 13} L${cx - 1} ${cy + 13} L${cx - 2} ${cy + 6} Z\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'bowtie':\n // Two triangles meeting at a center knot\n return [\n // left wing\n `<path d=\"M${cx - 1} ${cy} L${cx - 9} ${cy - 4} L${cx - 9} ${cy + 4} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // right wing\n `<path d=\"M${cx + 1} ${cy} L${cx + 9} ${cy - 4} L${cx + 9} ${cy + 4} Z\" fill=\"${palette.bodyTo}\" stroke=\"${ink}\" stroke-width=\"0.7\" />`,\n // center knot\n `<rect x=\"${cx - 1.4}\" y=\"${cy - 2.4}\" width=\"2.8\" height=\"4.8\" rx=\"0.8\" fill=\"${palette.bodyFrom}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n ].join('');\n\n case 'sunflower':\n // Sunflower boutonnière pinned to chest (off-center, like a real one)\n {\n const fx = cx - 8;\n const fy = cy + 2;\n const petals: string[] = [];\n // 8 petals around center\n for (let i = 0; i < 8; i++) {\n const a = (i / 8) * Math.PI * 2;\n const px = fx + Math.cos(a) * 3.2;\n const py = fy + Math.sin(a) * 3.2;\n petals.push(\n `<ellipse cx=\"${px.toFixed(2)}\" cy=\"${py.toFixed(2)}\" rx=\"2.4\" ry=\"1.3\" fill=\"#FACC15\" stroke=\"${ink}\" stroke-width=\"0.35\" transform=\"rotate(${(a * 180 / Math.PI).toFixed(1)} ${px.toFixed(2)} ${py.toFixed(2)})\" />`,\n );\n }\n return [\n // stem (tucked behind)\n `<path d=\"M${fx + 2} ${fy + 2} Q${fx + 4} ${fy + 6} ${fx + 1} ${fy + 10}\" stroke=\"#16A34A\" stroke-width=\"1.1\" fill=\"none\" stroke-linecap=\"round\" />`,\n // leaf\n `<path d=\"M${fx + 3} ${fy + 6} Q${fx + 7} ${fy + 4} ${fx + 6} ${fy + 8} Q${fx + 4} ${fy + 8} ${fx + 3} ${fy + 6} Z\" fill=\"#22C55E\" stroke=\"${ink}\" stroke-width=\"0.35\" />`,\n ...petals,\n // center disc\n `<circle cx=\"${fx}\" cy=\"${fy}\" r=\"2\" fill=\"#92400E\" stroke=\"${ink}\" stroke-width=\"0.4\" />`,\n // texture dots on disc\n `<circle cx=\"${fx - 0.6}\" cy=\"${fy - 0.5}\" r=\"0.4\" fill=\"#451A03\" />`,\n `<circle cx=\"${fx + 0.7}\" cy=\"${fy + 0.3}\" r=\"0.4\" fill=\"#451A03\" />`,\n `<circle cx=\"${fx - 0.4}\" cy=\"${fy + 0.8}\" r=\"0.4\" fill=\"#451A03\" />`,\n ].join('');\n }\n\n case 'necklace':\n // Thin curved chain w/ a small pendant\n return [\n // chain (curve from collarbone left → drop → right)\n `<path d=\"M${cx - 10} ${cy} Q${cx} ${cy + 8} ${cx + 10} ${cy}\" stroke=\"${accent}\" stroke-width=\"0.8\" fill=\"none\" stroke-linecap=\"round\" />`,\n // pendant\n `<circle cx=\"${cx}\" cy=\"${cy + 7}\" r=\"1.6\" fill=\"${accent}\" stroke=\"${ink}\" stroke-width=\"0.5\" />`,\n `<circle cx=\"${cx}\" cy=\"${cy + 7}\" r=\"0.7\" fill=\"${palette.blush}\" />`,\n ].join('');\n }\n}\n","export * from './palette.js';\nexport * from './body.js';\nexport * from './eyes.js';\nexport * from './mouth.js';\nexport * from './antenna.js';\nexport * from './accessory.js';\nexport * from './background.js';\nexport * from './topper.js';\nexport * from './outfit.js';\nexport * from './anchor.js';\n\nimport type {\n AccessoryId,\n AntennaStyleId,\n BackgroundId,\n BodyShapeId,\n EyeStyleId,\n MouthStyleId,\n OutfitId,\n TopperId,\n} from '../types.js';\n\nexport const BODY_IDS: readonly BodyShapeId[] = [\n 'orb', 'tall', 'squat', 'pear', 'pebble',\n 'dumpling', 'taro', 'wisp',\n];\nexport const EYE_IDS: readonly EyeStyleId[] = [\n 'round', 'wide', 'squint', 'wink', 'sleepy', 'star',\n 'heart', 'oval', 'dot', 'cross',\n];\nexport const MOUTH_IDS: readonly MouthStyleId[] = [\n 'smile', 'grin', 'open', 'flat', 'smirk', 'awe',\n 'tongue', 'tooth', 'wave', 'dot',\n];\nexport const ANTENNA_IDS: readonly AntennaStyleId[] = ['none', 'classic', 'curl', 'double', 'spike'];\nexport const ACCESSORY_IDS: readonly AccessoryId[] = [\n 'none', 'blush', 'freckles', 'sparkle',\n 'glasses', 'eyepatch', 'mole',\n];\nexport const BACKGROUND_IDS: readonly BackgroundId[] = ['none', 'solid', 'ring'];\nexport const TOPPER_IDS: readonly TopperId[] = [\n // 'none' weighted ~2× so plain-headed avatars stay common\n 'none', 'none', 'ears', 'roundEars', 'horn', 'horns', 'tuft', 'cap', 'leaf',\n 'headband', 'halo', 'crown', 'antlers',\n];\nexport const OUTFIT_IDS: readonly OutfitId[] = [\n // 'none' weighted heavy — most avatars stay plain-chested\n 'none', 'none', 'none', 'collar', 'scarf', 'bowtie', 'sunflower', 'necklace',\n];\n"]}
@@ -19,6 +19,7 @@ type AntennaStyleId = 'none' | 'classic' | 'curl' | 'double' | 'spike';
19
19
  type AccessoryId = 'none' | 'blush' | 'freckles' | 'sparkle' | 'glasses' | 'eyepatch' | 'mole';
20
20
  type BackgroundId = 'none' | 'solid' | 'ring';
21
21
  type TopperId = 'none' | 'ears' | 'roundEars' | 'horn' | 'horns' | 'tuft' | 'cap' | 'leaf' | 'headband' | 'halo' | 'crown' | 'antlers';
22
+ type OutfitId = 'none' | 'collar' | 'scarf' | 'bowtie' | 'sunflower' | 'necklace';
22
23
  interface AvatarSpec {
23
24
  seed: string;
24
25
  palette: Palette;
@@ -29,6 +30,7 @@ interface AvatarSpec {
29
30
  accessory: AccessoryId;
30
31
  background: BackgroundId;
31
32
  topper: TopperId;
33
+ outfit: OutfitId;
32
34
  /** Hue rotation applied to body fill via SVG feColorMatrix. Degrees, signed. */
33
35
  hueShift: number;
34
36
  /** Uniform scale on body group. ~0.92 to 1.08. */
@@ -61,4 +63,4 @@ interface AvatarOptions {
61
63
  tileBg?: string;
62
64
  }
63
65
 
64
- export type { AccessoryId as A, BackgroundId as B, EyeStyleId as E, MouthStyleId as M, Palette as P, TopperId as T, AntennaStyleId as a, AvatarOptions as b, AvatarSpec as c, BodyShapeId as d };
66
+ export type { AccessoryId as A, BackgroundId as B, EyeStyleId as E, MouthStyleId as M, OutfitId as O, Palette as P, TopperId as T, AntennaStyleId as a, AvatarOptions as b, AvatarSpec as c, BodyShapeId as d };
@@ -19,6 +19,7 @@ type AntennaStyleId = 'none' | 'classic' | 'curl' | 'double' | 'spike';
19
19
  type AccessoryId = 'none' | 'blush' | 'freckles' | 'sparkle' | 'glasses' | 'eyepatch' | 'mole';
20
20
  type BackgroundId = 'none' | 'solid' | 'ring';
21
21
  type TopperId = 'none' | 'ears' | 'roundEars' | 'horn' | 'horns' | 'tuft' | 'cap' | 'leaf' | 'headband' | 'halo' | 'crown' | 'antlers';
22
+ type OutfitId = 'none' | 'collar' | 'scarf' | 'bowtie' | 'sunflower' | 'necklace';
22
23
  interface AvatarSpec {
23
24
  seed: string;
24
25
  palette: Palette;
@@ -29,6 +30,7 @@ interface AvatarSpec {
29
30
  accessory: AccessoryId;
30
31
  background: BackgroundId;
31
32
  topper: TopperId;
33
+ outfit: OutfitId;
32
34
  /** Hue rotation applied to body fill via SVG feColorMatrix. Degrees, signed. */
33
35
  hueShift: number;
34
36
  /** Uniform scale on body group. ~0.92 to 1.08. */
@@ -61,4 +63,4 @@ interface AvatarOptions {
61
63
  tileBg?: string;
62
64
  }
63
65
 
64
- export type { AccessoryId as A, BackgroundId as B, EyeStyleId as E, MouthStyleId as M, Palette as P, TopperId as T, AntennaStyleId as a, AvatarOptions as b, AvatarSpec as c, BodyShapeId as d };
66
+ export type { AccessoryId as A, BackgroundId as B, EyeStyleId as E, MouthStyleId as M, OutfitId as O, Palette as P, TopperId as T, AntennaStyleId as a, AvatarOptions as b, AvatarSpec as c, BodyShapeId as d };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usenavii/core",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "Deterministic mascot avatar engine. Pass any seed, get back a clean, designed SVG that's the same every time.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",