{"version":3,"file":"index.cjs","names":[],"sources":["../src/types.ts","../src/utilities.ts","../src/AlienAvatar.tsx"],"sourcesContent":["export interface AvatarProps {\n  seed: string\n  size?: number\n  colors?: string[]\n  className?: string\n}\n\nexport type EyeType = 'neutral' | 'narrow' | 'wink-left' | 'wink-right'\nexport type MouthType = 'small' | 'smile' | 'happy' | 'sad' | 'x'\n\nexport interface NoisePixel {\n  x: number\n  y: number\n  w: number\n  h: number\n}\n\nexport interface Slice {\n  y: number\n  height: number\n  opacity: number\n  rotate: number\n}\n\nexport interface AlienAvatarData {\n  wrapperColor: string\n  faceColor: string\n  strokeColor: string\n  eyeType: EyeType\n  mouthType: MouthType\n  mouthWidthScale: number\n  mouthYOffset: number\n  mouthTilt: number\n  faceTranslateX: number\n  faceTranslateY: number\n  strokeTranslateX: number\n  strokeTranslateY: number\n  effects: {\n    noise: boolean\n    glitch: boolean\n    slices: boolean\n    stars: boolean\n  }\n  noiseTexture: NoisePixel[]\n  stars: { type: number }\n  glitchY: number\n  glitchHeight: number\n  glitchWidth: number\n  slices: Slice[]\n}\n\nexport const DEFAULT_COLORS = [\n  '#00ff41',\n  '#00d4ff',\n  '#BCC6C2',\n  '#ff406e',\n  '#8b31ff',\n]\n\nexport const SIZE = 36\n","import type {\n  NoisePixel,\n  Slice,\n} from './types'\n\nfunction cyrb128(str: string): [number, number, number, number] {\n  let h1 = 1779033703\n  let h2 = 3144134277\n  let h3 = 1013904242\n  let h4 = 2773480762\n\n  for (let i = 0; i < str.length; i++) {\n    const k = str.charCodeAt(i)\n    h1 = h2 ^ Math.imul(h1 ^ k, 597399067)\n    h2 = h3 ^ Math.imul(h2 ^ k, 2869860233)\n    h3 = h4 ^ Math.imul(h3 ^ k, 951274213)\n    h4 = h1 ^ Math.imul(h4 ^ k, 2716044179)\n  }\n\n  h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067)\n  h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233)\n  h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213)\n  h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179)\n\n  return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0]\n}\n\nfunction sfc32(a: number, b: number, c: number, d: number) {\n  return function next() {\n    a >>>= 0\n    b >>>= 0\n    c >>>= 0\n    d >>>= 0\n    const t = (a + b) | 0\n    a = b ^ (b >>> 9)\n    b = (c + (c << 3)) | 0\n    c = (c << 21) | (c >>> 11)\n    d = (d + 1) | 0\n    const out = (t + d) | 0\n    c = (c + out) | 0\n    return (out >>> 0) / 4294967296\n  }\n}\n\nexport function createSeedRng(seed: string): () => number {\n  const clean = seed.replace(/^0x/i, '')\n  const parts = cyrb128(clean)\n  return sfc32(parts[0], parts[1], parts[2], parts[3])\n}\n\nexport function randomInt(rng: () => number, min: number, max: number): number {\n  return Math.floor(rng() * (max - min + 1)) + min\n}\n\nexport function getDigit(number: number, ntn: number): number {\n  return Math.floor((number / 10 ** ntn) % 10)\n}\n\nexport function getUnit(hash: number, range: number, index?: number): number {\n  const value = hash % range\n  if (index && getDigit(hash, index) % 2 === 0) {\n    return -value\n  }\n  return value\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n  return Math.max(min, Math.min(max, value))\n}\n\nexport function jitterHex(hexColor: string, amount: number): string {\n  const hex = hexColor.startsWith('#') ? hexColor.slice(1) : hexColor\n  if (hex.length !== 6) {\n    return hexColor\n  }\n\n  const r = Number.parseInt(hex.substring(0, 2), 16)\n  const g = Number.parseInt(hex.substring(2, 4), 16)\n  const b = Number.parseInt(hex.substring(4, 6), 16)\n  const scale = 1 + amount\n\n  const rr = clamp(Math.round(r * scale), 0, 255)\n  const gg = clamp(Math.round(g * scale), 0, 255)\n  const bb = clamp(Math.round(b * scale), 0, 255)\n\n  return `#${rr.toString(16).padStart(2, '0')}${gg.toString(16).padStart(2, '0')}${bb.toString(16).padStart(2, '0')}`\n}\n\nfunction relativeLuminance(hexColor: string): number {\n  const hex = hexColor.startsWith('#') ? hexColor.slice(1) : hexColor\n  if (hex.length !== 6) {\n    return 0\n  }\n\n  const toLinear = (channel: number): number => {\n    const s = channel / 255\n    if (s <= 0.03928) {\n      return s / 12.92\n    }\n    return ((s + 0.055) / 1.055) ** 2.4\n  }\n\n  const r = toLinear(Number.parseInt(hex.substring(0, 2), 16))\n  const g = toLinear(Number.parseInt(hex.substring(2, 4), 16))\n  const b = toLinear(Number.parseInt(hex.substring(4, 6), 16))\n  return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\nexport function contrastRatio(a: string, b: string): number {\n  const l1 = relativeLuminance(a)\n  const l2 = relativeLuminance(b)\n  const lighter = Math.max(l1, l2)\n  const darker = Math.min(l1, l2)\n  return (lighter + 0.05) / (darker + 0.05)\n}\n\nexport function getContrast(hexcolor: string): string {\n  let hex = hexcolor\n  if (hex.slice(0, 1) === '#') {\n    hex = hex.slice(1)\n  }\n\n  const r = Number.parseInt(hex.substring(0, 2), 16)\n  const g = Number.parseInt(hex.substring(2, 4), 16)\n  const b = Number.parseInt(hex.substring(4, 6), 16)\n\n  const yiq = (r * 299 + g * 587 + b * 114) / 1000\n\n  return yiq >= 128 ? '#000000' : '#FFFFFF'\n}\n\nexport function generateNoiseTexture(hash: number): NoisePixel[] {\n  const numDots = 12\n  return Array.from({ length: numDots }, (_, i) => {\n    const hash1 = (hash * (i * 7 + 1)) % 0xFFFFFF\n    const hash2 = (hash * (i * 7 + 3)) % 0xFFFFFF\n    const hash3 = (hash * (i * 7 + 5)) % 0xFFFFFF\n    return {\n      x: 3 + (hash1 % 30),\n      y: 3 + (hash2 % 30),\n      w: 1 + (hash3 % 3),\n      h: 1 + ((hash3 + 1) % 3),\n    }\n  })\n}\n\nexport function generateSlices(hash: number, size: number, getUnitFn: typeof getUnit): Slice[] {\n  const numSlices = 5\n  return Array.from({ length: numSlices }, (_, i) => {\n    const sliceHash = hash * (i + 1) + 100\n    return {\n      y: getUnitFn(sliceHash, size, 1),\n      height: Math.max(1, 1 + getUnitFn(sliceHash, 4, 2)),\n      opacity: 0.2 + getUnitFn(sliceHash, 10, 3) / 20,\n      rotate: -15 + getUnitFn(sliceHash, 30, 1),\n    }\n  })\n}\n\nexport function pickColor(rng: () => number, colors: string[], used: Set<number>): string {\n  if (colors.length === 0) {\n    return '#000000'\n  }\n\n  let idx = randomInt(rng, 0, colors.length - 1)\n  if (used.has(idx) && used.size < colors.length) {\n    let attempts = 0\n    while (used.has(idx) && attempts < colors.length * 2) {\n      idx = randomInt(rng, 0, colors.length - 1)\n      attempts++\n    }\n  }\n  used.add(idx)\n  return colors[idx]\n}\n\nexport function pickContrastingColor(\n  rng: () => number,\n  baseColor: string,\n  colors: string[],\n  used: Set<number>,\n  minContrast = 2,\n): string {\n  if (colors.length === 0) {\n    return '#000000'\n  }\n\n  const indices = colors.map((_, i) => i)\n  for (let i = indices.length - 1; i > 0; i--) {\n    const j = randomInt(rng, 0, i)\n    ;[indices[i], indices[j]] = [indices[j], indices[i]]\n  }\n\n  let bestIdx = indices[0]\n  let bestScore = -1\n\n  for (const idx of indices) {\n    if (used.has(idx) && used.size < colors.length) {\n      continue\n    }\n    const score = contrastRatio(baseColor, colors[idx])\n    if (score >= minContrast) {\n      used.add(idx)\n      return colors[idx]\n    }\n    if (score > bestScore) {\n      bestScore = score\n      bestIdx = idx\n    }\n  }\n\n  used.add(bestIdx)\n  return colors[bestIdx]\n}\n","import type { ReactElement } from 'react'\nimport type {\n  AlienAvatarData,\n  AvatarProps,\n  EyeType,\n  MouthType,\n} from './types'\nimport { useMemo } from 'react'\nimport {\n  DEFAULT_COLORS,\n  SIZE,\n} from './types'\nimport {\n  contrastRatio,\n  createSeedRng,\n  generateNoiseTexture,\n  generateSlices,\n  getContrast,\n  getUnit,\n  jitterHex,\n  pickColor,\n  pickContrastingColor,\n  randomInt,\n} from './utilities'\n\nfunction generateStars(hash: number): AlienAvatarData['stars'] {\n  const type = hash % 4\n  return { type }\n}\n\nfunction generateHash(rng: () => number): number {\n  return Math.floor(rng() * 0x100000000) >>> 0\n}\n\nfunction pickEffects(rng: () => number): AlienAvatarData['effects'] {\n  const effects = {\n    noise: rng() < 0.34,\n    slices: rng() < 0.3,\n    glitch: rng() < 0.22,\n    stars: rng() < 0.28,\n  }\n\n  const names: Array<keyof typeof effects> = ['noise', 'slices', 'glitch', 'stars']\n  let active = names.filter(name => effects[name])\n\n  if (active.length === 0 && rng() < 0.6) {\n    effects[names[randomInt(rng, 0, names.length - 1)]] = true\n    active = names.filter(name => effects[name])\n  }\n\n  while (active.length > 2) {\n    const idx = randomInt(rng, 0, active.length - 1)\n    effects[active[idx]] = false\n    active = names.filter(name => effects[name])\n  }\n\n  return effects\n}\n\nfunction generateAvatarData(seed: string, colors: string[]): AlienAvatarData {\n  const rng = createSeedRng(seed)\n  const used = new Set<number>()\n  const wrapperBase = pickColor(rng, colors, used)\n  const strokeBase = pickContrastingColor(rng, wrapperBase, colors, used, 2.2)\n\n  const wrapperColor = jitterHex(wrapperBase, (rng() - 0.5) * 0.12)\n  let strokeColor = jitterHex(strokeBase, (rng() - 0.5) * 0.18)\n  if (contrastRatio(wrapperColor, strokeColor) < 2.2) {\n    strokeColor = strokeBase\n  }\n  const effects = pickEffects(rng)\n  const noiseHash = generateHash(rng)\n  const slicesHash = generateHash(rng)\n  const starsHash = generateHash(rng)\n  const glitchHash = generateHash(rng)\n  const eyeTypes = ['neutral', 'narrow', 'wink-left', 'wink-right'] as const\n  const mouthTypes = ['small', 'smile', 'happy', 'sad', 'x'] as const\n\n  return {\n    wrapperColor,\n    faceColor: getContrast(wrapperColor),\n    strokeColor,\n    eyeType: eyeTypes[randomInt(rng, 0, eyeTypes.length - 1)],\n    mouthType: mouthTypes[randomInt(rng, 0, mouthTypes.length - 1)],\n    mouthWidthScale: 0.78 + rng() * 0.44,\n    mouthYOffset: randomInt(rng, -2, 2),\n    mouthTilt: randomInt(rng, -8, 8),\n    faceTranslateX: randomInt(rng, -4, 4),\n    faceTranslateY: randomInt(rng, -3, 3),\n    strokeTranslateX: randomInt(rng, -2, 2),\n    strokeTranslateY: randomInt(rng, -2, 2),\n    effects,\n    noiseTexture: generateNoiseTexture(noiseHash),\n    stars: generateStars(starsHash),\n    glitchY: getUnit(glitchHash, SIZE - 4, 1),\n    glitchHeight: Math.max(1, 1 + getUnit(glitchHash, 4, 2)),\n    glitchWidth: Math.max(1, SIZE - 4 + getUnit(glitchHash, 8, 3)),\n    slices: generateSlices(slicesHash, SIZE, getUnit),\n  }\n}\n\nfunction PixelStar({ type, color }: { type: number, color: string }): ReactElement {\n  const x = 18\n  const y = 5\n\n  const stars = [\n    (\n      <g key=\"s\">\n        <rect x={x - 1} y={y - 1} width={3} height={3} fill=\"none\" stroke={color} strokeWidth={1} />\n        <rect x={x} y={y} width={1} height={1} fill={color} />\n      </g>\n    ),\n    (\n      <g key=\"s\">\n        <rect x={x} y={y - 1} width={1} height={1} fill={color} />\n        <rect x={x} y={y} width={1} height={1} fill={color} />\n        <rect x={x - 1} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x + 1} y={y + 1} width={1} height={1} fill={color} />\n      </g>\n    ),\n    (\n      <g key=\"s\">\n        <rect x={x - 1} y={y} width={1} height={1} fill={color} />\n        <rect x={x + 1} y={y} width={1} height={1} fill={color} />\n        <rect x={x - 2} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x - 1} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x + 1} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x + 2} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x} y={y + 2} width={1} height={1} fill={color} />\n      </g>\n    ),\n    (\n      <g key=\"s\">\n        <rect x={x - 1} y={y} width={3} height={1} fill={color} />\n        <rect x={x - 1} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x + 1} y={y + 1} width={1} height={1} fill={color} />\n        <rect x={x - 1} y={y + 2} width={1} height={1} fill={color} />\n        <rect x={x + 1} y={y + 2} width={1} height={1} fill={color} />\n        <rect x={x - 1} y={y + 3} width={3} height={1} fill={color} />\n      </g>\n    ),\n  ]\n\n  return stars[type]\n}\n\nfunction Eyes({ type, faceColor }: { type: EyeType, faceColor: string }): ReactElement {\n  const eyes: Record<EyeType, ReactElement> = {\n    'neutral': (\n      <>\n        <ellipse cx={11} cy={15} rx={3.5} ry={5} fill={faceColor} transform=\"rotate(-30, 11, 15)\" />\n        <ellipse cx={25} cy={15} rx={3.5} ry={5} fill={faceColor} transform=\"rotate(30, 25, 15)\" />\n      </>\n    ),\n    'narrow': (\n      <>\n        <ellipse cx={11} cy={15} rx={2.5} ry={4} fill={faceColor} transform=\"rotate(-35, 11, 15)\" />\n        <ellipse cx={25} cy={15} rx={2.5} ry={4} fill={faceColor} transform=\"rotate(35, 25, 15)\" />\n      </>\n    ),\n    'wink-left': (\n      <>\n        <path\n          d=\"M10,13 L12,15 L10,17\"\n          stroke={faceColor}\n          strokeWidth={1.5}\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          fill=\"none\"\n        />\n        <ellipse cx={21} cy={15} rx={3.5} ry={5} fill={faceColor} transform=\"rotate(30, 21, 15)\" />\n      </>\n    ),\n    'wink-right': (\n      <>\n        <ellipse cx={15} cy={15} rx={3.5} ry={5} fill={faceColor} transform=\"rotate(-30, 15, 15)\" />\n        <path\n          d=\"M26,13 L24,15 L26,17\"\n          stroke={faceColor}\n          strokeWidth={1.5}\n          strokeLinecap=\"round\"\n          strokeLinejoin=\"round\"\n          fill=\"none\"\n        />\n      </>\n    ),\n  }\n\n  return eyes[type]\n}\n\nfunction Mouth({\n  type,\n  faceColor,\n  widthScale,\n  yOffset,\n  tilt,\n}: {\n  type: MouthType\n  faceColor: string\n  widthScale: number\n  yOffset: number\n  tilt: number\n}): ReactElement {\n  const transform = `translate(${18 * (1 - widthScale)} ${yOffset}) scale(${widthScale} 1) rotate(${tilt} 18 25)`\n  const mouths: Record<MouthType, ReactElement> = {\n    small: <line x1={16} y1={25} x2={20} y2={25} stroke={faceColor} strokeWidth={1.2} strokeLinecap=\"round\" />,\n    smile: <path d=\"M15,25 Q18,27 21,25\" stroke={faceColor} strokeWidth={1.2} strokeLinecap=\"round\" fill=\"none\" />,\n    happy: <path d=\"M15,25 c2,1 4,1 6,0\" stroke={faceColor} strokeWidth={1.2} strokeLinecap=\"round\" fill=\"none\" />,\n    sad: <path d=\"M15,26 Q18,24 21,26\" stroke={faceColor} strokeWidth={1.2} strokeLinecap=\"round\" fill=\"none\" />,\n    x: (\n      <>\n        <line\n          x1={16.5}\n          y1={24}\n          x2={19.5}\n          y2={26}\n          stroke={faceColor}\n          strokeWidth={1.2}\n          strokeLinecap=\"round\"\n        />\n        <line\n          x1={19.5}\n          y1={24}\n          x2={16.5}\n          y2={26}\n          stroke={faceColor}\n          strokeWidth={1.2}\n          strokeLinecap=\"round\"\n        />\n      </>\n    ),\n  }\n\n  return <g transform={transform}>{mouths[type]}</g>\n}\n\nexport function AlienAvatar({\n  seed,\n  size = 40,\n  colors = DEFAULT_COLORS,\n  className,\n}: AvatarProps): ReactElement {\n  const data = useMemo(() => generateAvatarData(seed, colors), [seed, colors])\n\n  const clipId = `alien-clip-${seed.replace(/[^a-z0-9]/gi, '-')}`\n\n  return (\n    <svg\n      viewBox={`0 0 ${SIZE} ${SIZE}`}\n      width={size}\n      height={size}\n      className={className}\n      role=\"img\"\n      aria-label={`Avatar for ${seed}`}\n    >\n      <defs>\n        <clipPath id={clipId}>\n          <path d=\"M35 17c0 8.5-12 17-17 17-3.5 0-17-8.5-17-17S8.611 0 18 0s17 7.611 17 17z\" />\n        </clipPath>\n      </defs>\n\n      <g clipPath={`url(#${clipId})`}>\n        <path\n          d=\"M35 17c0 8.5-12 17-17 17-3.5 0-17-8.5-17-17S8.611 0 18 0s17 7.611 17 17z\"\n          fill={data.wrapperColor}\n          stroke={data.wrapperColor}\n          strokeWidth={0.5}\n        />\n\n        {data.effects.noise && (\n          <g fill=\"#000\" opacity={0.3}>\n            {data.noiseTexture.map((pixel, i) => (\n              <rect\n                key={`noise-${i}`}\n                x={pixel.x}\n                y={pixel.y}\n                width={pixel.w}\n                height={pixel.h}\n              />\n            ))}\n          </g>\n        )}\n\n        {data.effects.slices && (\n          <g>\n            {data.slices.map((slice, i) => (\n              <rect\n                key={`slice-${i}`}\n                x={-SIZE}\n                y={slice.y}\n                width={SIZE * 3}\n                height={slice.height}\n                fill=\"#000\"\n                opacity={slice.opacity}\n                transform={`rotate(${slice.rotate} ${SIZE / 2} ${slice.y})`}\n              />\n            ))}\n          </g>\n        )}\n\n        {data.effects.glitch && (\n          <rect\n            x={2}\n            y={data.glitchY}\n            width={data.glitchWidth}\n            height={data.glitchHeight}\n            fill=\"#000\"\n            opacity={0.4}\n          />\n        )}\n\n        <g transform={`translate(${data.faceTranslateX} ${1 + data.faceTranslateY})`}>\n          {data.effects.stars && <PixelStar type={data.stars.type} color={data.faceColor} />}\n          <Eyes type={data.eyeType} faceColor={data.faceColor} />\n          <Mouth\n            type={data.mouthType}\n            faceColor={data.faceColor}\n            widthScale={data.mouthWidthScale}\n            yOffset={data.mouthYOffset}\n            tilt={data.mouthTilt}\n          />\n        </g>\n\n        <path\n          d=\"M35 17c0 8.5-12 17-17 17-3.5 0-17-8.5-17-17S8.611 0 18 0s17 7.611 17 17z\"\n          fill=\"none\"\n          stroke={data.strokeColor}\n          strokeWidth={1}\n          transform={`translate(${data.strokeTranslateX - 0.5} ${data.strokeTranslateY - 0.25}) scale(0.95)`}\n        />\n      </g>\n    </svg>\n  )\n}\n"],"mappings":"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"}