@usenavii/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +846 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +80 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.js +838 -0
- package/dist/index.js.map +1 -0
- package/dist/parts.cjs +594 -0
- package/dist/parts.cjs.map +1 -0
- package/dist/parts.d.cts +84 -0
- package/dist/parts.d.ts +84 -0
- package/dist/parts.js +574 -0
- package/dist/parts.js.map +1 -0
- package/dist/types-BlMtdWZf.d.cts +64 -0
- package/dist/types-BlMtdWZf.d.ts +64 -0
- package/package.json +58 -0
|
@@ -0,0 +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.cjs","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"]}
|
package/dist/parts.d.cts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { P as Palette, d as BodyShapeId, E as EyeStyleId, M as MouthStyleId, a as AntennaStyleId, A as AccessoryId, B as BackgroundId, T as TopperId } from './types-BlMtdWZf.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Palette set seeded from the Comms360 "Pulse" mascot DNA, extended to provide
|
|
5
|
+
* enough hue variety for identity-level differentiation across many users.
|
|
6
|
+
*
|
|
7
|
+
* `bodyFrom`/`bodyTo` feed the radial gradient. `ink` is the line/face color
|
|
8
|
+
* (dark complement of the body). `accent` is used for antenna sparks and other
|
|
9
|
+
* highlights. `blush` is the cheek tint.
|
|
10
|
+
*/
|
|
11
|
+
declare const PALETTES: readonly Palette[];
|
|
12
|
+
declare const PALETTE_BY_ID: Record<string, Palette>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Face anchors define where features attach for each body silhouette.
|
|
16
|
+
*
|
|
17
|
+
* Without anchors, every body wears the same face at the same coordinates and
|
|
18
|
+
* the avatar reads as "AI-generated." With anchors, a tall egg-shaped body has
|
|
19
|
+
* a higher, narrower face than a squat mushroom-shaped one, and antenna mounts
|
|
20
|
+
* follow each silhouette's actual apex.
|
|
21
|
+
*
|
|
22
|
+
* All coordinates are in the 100x100 viewBox.
|
|
23
|
+
*/
|
|
24
|
+
interface FaceAnchor {
|
|
25
|
+
/** Center of the face for symmetry math. */
|
|
26
|
+
cx: number;
|
|
27
|
+
/** Vertical line where eyes sit. */
|
|
28
|
+
eyeY: number;
|
|
29
|
+
/** Horizontal distance from cx to each eye center. */
|
|
30
|
+
eyeOffset: number;
|
|
31
|
+
/** Vertical eye size scale (1.0 = baseline). */
|
|
32
|
+
eyeScale: number;
|
|
33
|
+
/** Vertical line where the mouth sits. */
|
|
34
|
+
mouthY: number;
|
|
35
|
+
/** Mouth horizontal half-width (smile arc spans cx ± this). */
|
|
36
|
+
mouthSpan: number;
|
|
37
|
+
/** Where the antenna / topper mounts on the body. */
|
|
38
|
+
topperX: number;
|
|
39
|
+
topperY: number;
|
|
40
|
+
/** Body's lowest point — used by ground shadow. */
|
|
41
|
+
groundY: number;
|
|
42
|
+
/** Body's leftmost / rightmost extents at the eye line — for cheek blush placement. */
|
|
43
|
+
cheekY: number;
|
|
44
|
+
cheekOffset: number;
|
|
45
|
+
}
|
|
46
|
+
declare const ANCHORS: Record<BodyShapeId, FaceAnchor>;
|
|
47
|
+
|
|
48
|
+
declare function bodyAnchor(id: BodyShapeId): FaceAnchor;
|
|
49
|
+
declare function renderBodyDefs(_id: BodyShapeId, _palette: Palette, gradId: string): string;
|
|
50
|
+
declare function renderBody(id: BodyShapeId, palette: Palette, gradId: string): string;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Eyes consume the FaceAnchor: position, gap, and vertical scale all flex
|
|
54
|
+
* with the body silhouette. Style id determines shape only.
|
|
55
|
+
*/
|
|
56
|
+
declare function renderEyes(id: EyeStyleId, palette: Palette, anchor: FaceAnchor): string;
|
|
57
|
+
|
|
58
|
+
declare function renderMouth(id: MouthStyleId, palette: Palette, anchor: FaceAnchor, curveScale?: number): string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Antenna mounts at anchor.topperX / topperY (body's apex).
|
|
62
|
+
*/
|
|
63
|
+
declare function renderAntenna(id: AntennaStyleId, anchor: FaceAnchor, palette: Palette): string;
|
|
64
|
+
|
|
65
|
+
declare function renderAccessory(id: AccessoryId, palette: Palette, anchor: FaceAnchor): string;
|
|
66
|
+
|
|
67
|
+
declare function renderBackground(id: BackgroundId, palette: Palette, override?: string): string;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Topper = the layer that sits behind/above the body silhouette: ears, horns,
|
|
71
|
+
* tufts, caps. This is independent from antenna (which is a small spark).
|
|
72
|
+
* Toppers significantly increase identity diversity.
|
|
73
|
+
*/
|
|
74
|
+
declare function renderTopper(id: TopperId, anchor: FaceAnchor, palette: Palette): string;
|
|
75
|
+
|
|
76
|
+
declare const BODY_IDS: readonly BodyShapeId[];
|
|
77
|
+
declare const EYE_IDS: readonly EyeStyleId[];
|
|
78
|
+
declare const MOUTH_IDS: readonly MouthStyleId[];
|
|
79
|
+
declare const ANTENNA_IDS: readonly AntennaStyleId[];
|
|
80
|
+
declare const ACCESSORY_IDS: readonly AccessoryId[];
|
|
81
|
+
declare const BACKGROUND_IDS: readonly BackgroundId[];
|
|
82
|
+
declare const TOPPER_IDS: readonly TopperId[];
|
|
83
|
+
|
|
84
|
+
export { ACCESSORY_IDS, ANCHORS, ANTENNA_IDS, BACKGROUND_IDS, BODY_IDS, EYE_IDS, type FaceAnchor, MOUTH_IDS, PALETTES, PALETTE_BY_ID, TOPPER_IDS, bodyAnchor, renderAccessory, renderAntenna, renderBackground, renderBody, renderBodyDefs, renderEyes, renderMouth, renderTopper };
|
package/dist/parts.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { P as Palette, d as BodyShapeId, E as EyeStyleId, M as MouthStyleId, a as AntennaStyleId, A as AccessoryId, B as BackgroundId, T as TopperId } from './types-BlMtdWZf.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Palette set seeded from the Comms360 "Pulse" mascot DNA, extended to provide
|
|
5
|
+
* enough hue variety for identity-level differentiation across many users.
|
|
6
|
+
*
|
|
7
|
+
* `bodyFrom`/`bodyTo` feed the radial gradient. `ink` is the line/face color
|
|
8
|
+
* (dark complement of the body). `accent` is used for antenna sparks and other
|
|
9
|
+
* highlights. `blush` is the cheek tint.
|
|
10
|
+
*/
|
|
11
|
+
declare const PALETTES: readonly Palette[];
|
|
12
|
+
declare const PALETTE_BY_ID: Record<string, Palette>;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Face anchors define where features attach for each body silhouette.
|
|
16
|
+
*
|
|
17
|
+
* Without anchors, every body wears the same face at the same coordinates and
|
|
18
|
+
* the avatar reads as "AI-generated." With anchors, a tall egg-shaped body has
|
|
19
|
+
* a higher, narrower face than a squat mushroom-shaped one, and antenna mounts
|
|
20
|
+
* follow each silhouette's actual apex.
|
|
21
|
+
*
|
|
22
|
+
* All coordinates are in the 100x100 viewBox.
|
|
23
|
+
*/
|
|
24
|
+
interface FaceAnchor {
|
|
25
|
+
/** Center of the face for symmetry math. */
|
|
26
|
+
cx: number;
|
|
27
|
+
/** Vertical line where eyes sit. */
|
|
28
|
+
eyeY: number;
|
|
29
|
+
/** Horizontal distance from cx to each eye center. */
|
|
30
|
+
eyeOffset: number;
|
|
31
|
+
/** Vertical eye size scale (1.0 = baseline). */
|
|
32
|
+
eyeScale: number;
|
|
33
|
+
/** Vertical line where the mouth sits. */
|
|
34
|
+
mouthY: number;
|
|
35
|
+
/** Mouth horizontal half-width (smile arc spans cx ± this). */
|
|
36
|
+
mouthSpan: number;
|
|
37
|
+
/** Where the antenna / topper mounts on the body. */
|
|
38
|
+
topperX: number;
|
|
39
|
+
topperY: number;
|
|
40
|
+
/** Body's lowest point — used by ground shadow. */
|
|
41
|
+
groundY: number;
|
|
42
|
+
/** Body's leftmost / rightmost extents at the eye line — for cheek blush placement. */
|
|
43
|
+
cheekY: number;
|
|
44
|
+
cheekOffset: number;
|
|
45
|
+
}
|
|
46
|
+
declare const ANCHORS: Record<BodyShapeId, FaceAnchor>;
|
|
47
|
+
|
|
48
|
+
declare function bodyAnchor(id: BodyShapeId): FaceAnchor;
|
|
49
|
+
declare function renderBodyDefs(_id: BodyShapeId, _palette: Palette, gradId: string): string;
|
|
50
|
+
declare function renderBody(id: BodyShapeId, palette: Palette, gradId: string): string;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Eyes consume the FaceAnchor: position, gap, and vertical scale all flex
|
|
54
|
+
* with the body silhouette. Style id determines shape only.
|
|
55
|
+
*/
|
|
56
|
+
declare function renderEyes(id: EyeStyleId, palette: Palette, anchor: FaceAnchor): string;
|
|
57
|
+
|
|
58
|
+
declare function renderMouth(id: MouthStyleId, palette: Palette, anchor: FaceAnchor, curveScale?: number): string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Antenna mounts at anchor.topperX / topperY (body's apex).
|
|
62
|
+
*/
|
|
63
|
+
declare function renderAntenna(id: AntennaStyleId, anchor: FaceAnchor, palette: Palette): string;
|
|
64
|
+
|
|
65
|
+
declare function renderAccessory(id: AccessoryId, palette: Palette, anchor: FaceAnchor): string;
|
|
66
|
+
|
|
67
|
+
declare function renderBackground(id: BackgroundId, palette: Palette, override?: string): string;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Topper = the layer that sits behind/above the body silhouette: ears, horns,
|
|
71
|
+
* tufts, caps. This is independent from antenna (which is a small spark).
|
|
72
|
+
* Toppers significantly increase identity diversity.
|
|
73
|
+
*/
|
|
74
|
+
declare function renderTopper(id: TopperId, anchor: FaceAnchor, palette: Palette): string;
|
|
75
|
+
|
|
76
|
+
declare const BODY_IDS: readonly BodyShapeId[];
|
|
77
|
+
declare const EYE_IDS: readonly EyeStyleId[];
|
|
78
|
+
declare const MOUTH_IDS: readonly MouthStyleId[];
|
|
79
|
+
declare const ANTENNA_IDS: readonly AntennaStyleId[];
|
|
80
|
+
declare const ACCESSORY_IDS: readonly AccessoryId[];
|
|
81
|
+
declare const BACKGROUND_IDS: readonly BackgroundId[];
|
|
82
|
+
declare const TOPPER_IDS: readonly TopperId[];
|
|
83
|
+
|
|
84
|
+
export { ACCESSORY_IDS, ANCHORS, ANTENNA_IDS, BACKGROUND_IDS, BODY_IDS, EYE_IDS, type FaceAnchor, MOUTH_IDS, PALETTES, PALETTE_BY_ID, TOPPER_IDS, bodyAnchor, renderAccessory, renderAntenna, renderBackground, renderBody, renderBodyDefs, renderEyes, renderMouth, renderTopper };
|