solfaces 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +155 -14
  2. package/SKILL.md +180 -0
  3. package/dist/agent/index.cjs +14 -13
  4. package/dist/agent/index.js +4 -3
  5. package/dist/agent/mcp-server.cjs +2248 -13
  6. package/dist/{chunk-HCEE4K4T.js → chunk-3CE7Q44S.js} +6 -5
  7. package/dist/chunk-3CE7Q44S.js.map +1 -0
  8. package/dist/{chunk-23XJ5VDX.cjs → chunk-4YFZ4W2Y.cjs} +47 -16
  9. package/dist/chunk-4YFZ4W2Y.cjs.map +1 -0
  10. package/dist/{chunk-LRHYF5QN.js → chunk-5DT27HMT.js} +3 -3
  11. package/dist/{chunk-LRHYF5QN.js.map → chunk-5DT27HMT.js.map} +1 -1
  12. package/dist/{chunk-TTGJZEPV.js → chunk-66PSL4YO.js} +43 -12
  13. package/dist/chunk-66PSL4YO.js.map +1 -0
  14. package/dist/{chunk-JS527VKL.js → chunk-CKHLRORB.js} +6 -5
  15. package/dist/chunk-CKHLRORB.js.map +1 -0
  16. package/dist/{chunk-6UWILY7E.cjs → chunk-F54WHRCE.cjs} +6 -5
  17. package/dist/chunk-F54WHRCE.cjs.map +1 -0
  18. package/dist/chunk-N5DDJ3WQ.js +2242 -0
  19. package/dist/chunk-N5DDJ3WQ.js.map +1 -0
  20. package/dist/{chunk-46ZEFA6R.cjs → chunk-TYTBYDQU.cjs} +10 -9
  21. package/dist/chunk-TYTBYDQU.cjs.map +1 -0
  22. package/dist/{chunk-546TBMAR.cjs → chunk-WIXGHS77.cjs} +6 -6
  23. package/dist/{chunk-546TBMAR.cjs.map → chunk-WIXGHS77.cjs.map} +1 -1
  24. package/dist/chunk-XXJJH56O.cjs +2251 -0
  25. package/dist/chunk-XXJJH56O.cjs.map +1 -0
  26. package/dist/constants-Bi5uTRp5.d.cts +17 -0
  27. package/dist/constants-Bi5uTRp5.d.ts +17 -0
  28. package/dist/core/index.cjs +31 -31
  29. package/dist/core/index.d.cts +2 -2
  30. package/dist/core/index.d.ts +2 -2
  31. package/dist/core/index.js +3 -3
  32. package/dist/index.cjs +63 -34
  33. package/dist/index.d.cts +3 -1
  34. package/dist/index.d.ts +3 -1
  35. package/dist/index.js +5 -4
  36. package/dist/names/index.cjs +40 -0
  37. package/dist/names/index.cjs.map +1 -0
  38. package/dist/names/index.d.cts +48 -0
  39. package/dist/names/index.d.ts +48 -0
  40. package/dist/names/index.js +3 -0
  41. package/dist/names/index.js.map +1 -0
  42. package/dist/react/index.cjs +45 -22
  43. package/dist/react/index.cjs.map +1 -1
  44. package/dist/react/index.d.cts +16 -3
  45. package/dist/react/index.d.ts +16 -3
  46. package/dist/react/index.js +30 -8
  47. package/dist/react/index.js.map +1 -1
  48. package/dist/solfaces.cdn.global.js +2 -2
  49. package/dist/solfaces.cdn.global.js.map +1 -1
  50. package/dist/themes/index.d.cts +1 -1
  51. package/dist/themes/index.d.ts +1 -1
  52. package/dist/{traits-QlWuxZDD.d.cts → traits-sfe7rM9C.d.cts} +1 -0
  53. package/dist/{traits-QlWuxZDD.d.ts → traits-sfe7rM9C.d.ts} +1 -0
  54. package/dist/vanilla/index.cjs +5 -5
  55. package/dist/vanilla/index.d.cts +1 -1
  56. package/dist/vanilla/index.d.ts +1 -1
  57. package/dist/vanilla/index.js +2 -2
  58. package/package.json +22 -5
  59. package/python/solfaces.py +274 -3
  60. package/reference/integrations.md +211 -0
  61. package/reference/react.md +108 -0
  62. package/reference/themes.md +124 -0
  63. package/dist/chunk-23XJ5VDX.cjs.map +0 -1
  64. package/dist/chunk-46ZEFA6R.cjs.map +0 -1
  65. package/dist/chunk-6UWILY7E.cjs.map +0 -1
  66. package/dist/chunk-HCEE4K4T.js.map +0 -1
  67. package/dist/chunk-JS527VKL.js.map +0 -1
  68. package/dist/chunk-TTGJZEPV.js.map +0 -1
  69. package/skill.md +0 -608
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/names/sha256.ts","../src/names/constants.ts","../src/names/derive.ts","../src/names/validate.ts"],"names":[],"mappings":"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","file":"chunk-N5DDJ3WQ.js","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// Pure-JS SHA-256 — NIST FIPS 180-4\n// Synchronous, zero dependencies, works in all JS environments.\n// ═══════════════════════════════════════════════════════════════\n\nconst K: readonly number[] = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n\nfunction rotr(n: number, x: number): number {\n return (x >>> n) | (x << (32 - n));\n}\n\nexport function sha256(input: string): Uint8Array {\n // Encode UTF-8\n const encoder = new TextEncoder();\n const msg = encoder.encode(input);\n const bitLen = msg.length * 8;\n\n // Padding: append 1-bit, zeros, then 64-bit big-endian length\n const padLen = 64 - ((msg.length + 9) % 64);\n const totalLen = msg.length + 1 + (padLen === 64 ? 0 : padLen) + 8;\n const buf = new Uint8Array(totalLen);\n buf.set(msg);\n buf[msg.length] = 0x80;\n // Write 64-bit big-endian length (we only use lower 32 bits since JS strings are limited)\n const dv = new DataView(buf.buffer);\n dv.setUint32(totalLen - 4, bitLen, false);\n\n // Initial hash values\n let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\n let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\n\n const W = new Int32Array(64);\n\n // Process each 512-bit (64-byte) block\n for (let offset = 0; offset < totalLen; offset += 64) {\n for (let i = 0; i < 16; i++) {\n W[i] = dv.getInt32(offset + i * 4, false);\n }\n for (let i = 16; i < 64; i++) {\n const s0 = rotr(7, W[i - 15]) ^ rotr(18, W[i - 15]) ^ (W[i - 15] >>> 3);\n const s1 = rotr(17, W[i - 2]) ^ rotr(19, W[i - 2]) ^ (W[i - 2] >>> 10);\n W[i] = (W[i - 16] + s0 + W[i - 7] + s1) | 0;\n }\n\n let a = h0, b = h1, c = h2, d = h3;\n let e = h4, f = h5, g = h6, h = h7;\n\n for (let i = 0; i < 64; i++) {\n const S1 = rotr(6, e) ^ rotr(11, e) ^ rotr(25, e);\n const ch = (e & f) ^ (~e & g);\n const temp1 = (h + S1 + ch + K[i] + W[i]) | 0;\n const S0 = rotr(2, a) ^ rotr(13, a) ^ rotr(22, a);\n const maj = (a & b) ^ (a & c) ^ (b & c);\n const temp2 = (S0 + maj) | 0;\n\n h = g; g = f; f = e; e = (d + temp1) | 0;\n d = c; c = b; b = a; a = (temp1 + temp2) | 0;\n }\n\n h0 = (h0 + a) | 0; h1 = (h1 + b) | 0;\n h2 = (h2 + c) | 0; h3 = (h3 + d) | 0;\n h4 = (h4 + e) | 0; h5 = (h5 + f) | 0;\n h6 = (h6 + g) | 0; h7 = (h7 + h) | 0;\n }\n\n const out = new Uint8Array(32);\n const outView = new DataView(out.buffer);\n outView.setUint32(0, h0, false); outView.setUint32(4, h1, false);\n outView.setUint32(8, h2, false); outView.setUint32(12, h3, false);\n outView.setUint32(16, h4, false); outView.setUint32(20, h5, false);\n outView.setUint32(24, h6, false); outView.setUint32(28, h7, false);\n return out;\n}\n\nexport function sha256Hex(input: string): string {\n return Array.from(sha256(input))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n","// ═══════════════════════════════════════════════════════════════\n// SolNames v1 — Word Lists & Constants\n// 1000 adjectives × 1000 nouns = 1,000,000 display name combos.\n// All words are positive or neutral. No negative, offensive, or\n// embarrassing terms. PascalCase for concatenation readability.\n// ═══════════════════════════════════════════════════════════════\n\nexport const SOLNAMES_VERSION = \"v1\" as const;\n\nexport type NameFormat = \"short\" | \"display\" | \"tag\" | \"full\";\n\nexport interface SolNameIdentity {\n short: string;\n name: string;\n tag: string;\n full: string;\n adjective: string;\n noun: string;\n hash: string;\n discriminator: string;\n}\n\n// ─── Adjectives (1000) ──────────────────────────────────────────\nexport const ADJECTIVES: readonly string[] = Object.freeze([\n \"Frost\",\"Solar\",\"Coral\",\"Amber\",\"Mossy\",\"Lunar\",\"Misty\",\"Alpine\",\n \"Autumn\",\"Breeze\",\"Cerulean\",\"Cloudy\",\"Cosmic\",\"Crystal\",\"Dewy\",\"Dusty\",\n \"Earthy\",\"Floral\",\"Forest\",\"Frozen\",\"Glacial\",\"Golden\",\"Grassy\",\"Harbor\",\n \"Ivory\",\"Jasmine\",\"Lagoon\",\"Leafy\",\"Lush\",\"Marine\",\"Meadow\",\"Mineral\",\n \"Mosaic\",\"Nectar\",\"Nordic\",\"Oceanic\",\"Orchid\",\"Pearly\",\"Petal\",\"Polar\",\n \"Prairie\",\"Rain\",\"River\",\"Rocky\",\"Sandy\",\"Savanna\",\"Shore\",\"Sierra\",\n \"Snowy\",\"Spring\",\"Starry\",\"Stone\",\"Summer\",\"Sunset\",\"Tidal\",\"Timber\",\n \"Tropic\",\"Tundra\",\"Valley\",\"Verdant\",\"Winding\",\"Winter\",\"Woody\",\"Bloom\",\n \"Blossom\",\"Brook\",\"Canyon\",\"Cedar\",\"Cloud\",\"Comet\",\"Copper\",\"Dawn\",\n \"Delta\",\"Dune\",\"Eclipse\",\"Fern\",\"Flame\",\"Flora\",\"Glade\",\"Azure\",\n \"Cobalt\",\"Crimson\",\"Indigo\",\"Scarlet\",\"Sapphire\",\"Emerald\",\"Ruby\",\"Garnet\",\n \"Onyx\",\"Jade\",\"Turquoise\",\"Magenta\",\"Plum\",\"Russet\",\"Tawny\",\"Burnt\",\n \"Gilded\",\"Platinum\",\"Bronze\",\"Chrome\",\"Pearl\",\"Opal\",\"Blush\",\"Rosy\",\n \"Dusky\",\"Inky\",\"Ashen\",\"Cream\",\"Slate\",\"Charcoal\",\"Steel\",\"Pewter\",\n \"Honey\",\"Saffron\",\"Citrus\",\"Lemon\",\"Tangerine\",\"Peach\",\"Apricot\",\"Vermilion\",\n \"Mauve\",\"Lilac\",\"Periwinkle\",\"Cerise\",\"Maroon\",\"Burgundy\",\"Wine\",\"Berry\",\n \"Cherry\",\"Mint\",\"Olive\",\"Teal\",\"Navy\",\"Cyan\",\"Neon\",\"Pastel\",\n \"Muted\",\"Lustrous\",\"Gleaming\",\"Glossy\",\"Shining\",\"Glowing\",\"Luminous\",\"Brilliant\",\n \"Sparkling\",\"Shimmering\",\"Iridescent\",\"Prismatic\",\"Spectral\",\"Twilight\",\"Sunrise\",\"Sunlit\",\n \"Moonlit\",\"Starlit\",\"Candlelit\",\"Firelit\",\"Sunbeam\",\"Afterglow\",\"Halo\",\"Flicker\",\n \"Glow\",\"Ray\",\"Beam\",\"Blaze\",\"Glint\",\"Spark\",\"Arc\",\"Prism\",\n \"Spectrum\",\"Rainbow\",\"Aurora\",\"Nebula\",\"Stellar\",\"Astral\",\"Lucent\",\"Frosted\",\n \"Swift\",\"Bold\",\"Keen\",\"Brave\",\"Noble\",\"Serene\",\"Fierce\",\"Gentle\",\n \"Agile\",\"Alert\",\"Astute\",\"Candid\",\"Clever\",\"Daring\",\"Eager\",\"Earnest\",\n \"Fair\",\"Gallant\",\"Graceful\",\"Hardy\",\"Honest\",\"Humble\",\"Jovial\",\"Joyful\",\n \"Kind\",\"Loyal\",\"Merry\",\"Mindful\",\"Nimble\",\"Patient\",\"Plucky\",\"Proud\",\n \"Quick\",\"Ready\",\"Resilient\",\"Savvy\",\"Sincere\",\"Skilled\",\"Steady\",\"Stout\",\n \"Strong\",\"Sure\",\"Tender\",\"True\",\"Valiant\",\"Willing\",\"Wise\",\"Witty\",\n \"Worthy\",\"Zealous\",\"Active\",\"Adept\",\"Ardent\",\"Avid\",\"Benign\",\"Bright\",\n \"Civil\",\"Clean\",\"Clear\",\"Composed\",\"Content\",\"Courtly\",\"Crafty\",\"Curious\",\n \"Decent\",\"Devout\",\"Diligent\",\"Direct\",\"Driven\",\"Dynamic\",\"Elegant\",\"Elite\",\n \"Even\",\"Exact\",\"Famed\",\"Fervent\",\"Fine\",\"Firm\",\"Fit\",\"Fluid\",\n \"Focal\",\"Fond\",\"Frank\",\"Free\",\"Fresh\",\"Friendly\",\"Frugal\",\"Gifted\",\n \"Glad\",\"Grand\",\"Great\",\"Green\",\"Grounded\",\"Hale\",\"Happy\",\"Hearty\",\n \"Heroic\",\"Ideal\",\"Infinite\",\"Inner\",\"Intact\",\"Intent\",\"Just\",\"Lively\",\n \"Lucky\",\"Major\",\"Mellow\",\"Mighty\",\"Modest\",\"Natural\",\"Neat\",\"Optimal\",\n \"Original\",\"Pacific\",\"Peaceful\",\"Pious\",\"Pleased\",\"Poised\",\"Polite\",\"Popular\",\n \"Potent\",\"Precious\",\"Premier\",\"Prime\",\"Proper\",\"Proven\",\"Pure\",\"Quiet\",\n \"Rapid\",\"Rare\",\"Real\",\"Regal\",\"Rich\",\"Rising\",\"Robust\",\"Royal\",\n \"Sacred\",\"Safe\",\"Scenic\",\"Secure\",\"Senior\",\"Sharp\",\"Simple\",\"Smart\",\n \"Smooth\",\"Snug\",\"Social\",\"Solid\",\"Sound\",\"Special\",\"Stable\",\"Stately\",\n \"Still\",\"Super\",\"Supreme\",\"Sweet\",\"Thorough\",\"Tidy\",\"Top\",\"Total\",\n \"Tough\",\"Trim\",\"Trusted\",\"Ultimate\",\"Unique\",\"United\",\"Upper\",\"Useful\",\n \"Valid\",\"Valued\",\"Varied\",\"Vital\",\"Vivid\",\"Vocal\",\"Whole\",\"Wide\",\n \"Young\",\"Zesty\",\"Iron\",\"Gold\",\"Silver\",\"Marble\",\"Granite\",\"Velvet\",\n \"Satin\",\"Silk\",\"Linen\",\"Cotton\",\"Suede\",\"Denim\",\"Canvas\",\"Leather\",\n \"Wooden\",\"Bamboo\",\"Wicker\",\"Woven\",\"Braided\",\"Knit\",\"Lace\",\"Mesh\",\n \"Fiber\",\"Glass\",\"Mirror\",\"Diamond\",\"Flint\",\"Basalt\",\"Obsidian\",\"Chalk\",\n \"Clay\",\"Gravel\",\"Pebble\",\"Cobble\",\"Brick\",\"Tile\",\"Resin\",\"Fossil\",\n \"Shell\",\"Bone\",\"Feather\",\"Plush\",\"Brushed\",\"Polished\",\"Hammered\",\"Forged\",\n \"Cast\",\"Molten\",\"Tempered\",\"Etched\",\"Carved\",\"Sculpted\",\"Spun\",\"Pressed\",\n \"Rolled\",\"Folded\",\"Layered\",\"Stacked\",\"Ribbed\",\"Matte\",\"Lacquered\",\"Enameled\",\n \"Glazed\",\"Painted\",\"Dyed\",\"Stained\",\"Refined\",\"Distilled\",\"Purified\",\"Filtered\",\n \"Alloyed\",\"Plated\",\"Coated\",\"Sealed\",\"Bonded\",\"Fused\",\"Welded\",\"Riveted\",\n \"Textured\",\"Grained\",\"Veined\",\"Flecked\",\"Speckled\",\"Dappled\",\"Streaked\",\"Banded\",\n \"Striped\",\"Checkered\",\"Waxed\",\"Oiled\",\"Cured\",\"Tanned\",\"Smoked\",\"Burnished\",\n \"Antiqued\",\"Patina\",\"Weathered\",\"Aged\",\"Rustic\",\"Hewn\",\"Vast\",\"Broad\",\n \"Deep\",\"High\",\"Tall\",\"Giant\",\"Colossal\",\"Massive\",\"Immense\",\"Boundless\",\n \"Endless\",\"Sweeping\",\"Spanning\",\"Extended\",\"Towering\",\"Soaring\",\"Lofty\",\"Elevated\",\n \"Raised\",\"Summit\",\"Apex\",\"Crest\",\"Crown\",\"Pinnacle\",\"Zenith\",\"Ridge\",\n \"Ledge\",\"Level\",\"Hollow\",\"Compact\",\"Dense\",\"Thick\",\"Narrow\",\"Slender\",\n \"Micro\",\"Mini\",\"Small\",\"Ample\",\"Hefty\",\"Jumbo\",\"Mega\",\"Ultra\",\n \"Macro\",\"Central\",\"Core\",\"Outer\",\"Lateral\",\"Radial\",\"Spiral\",\"Orbital\",\n \"Linear\",\"Planar\",\"Spherical\",\"Rounded\",\"Angular\",\"Pointed\",\"Tapered\",\"Curved\",\n \"Arced\",\"Twisted\",\"Coiled\",\"Fractal\",\"Cellular\",\"Quantum\",\"Photon\",\"Plasma\",\n \"Kinetic\",\"Static\",\"Charged\",\"Maximal\",\"Atomic\",\"Nano\",\"Tiered\",\"Strata\",\n \"Nested\",\"Stepped\",\"Graded\",\"Scaled\",\"Proportioned\",\"Modular\",\"Symmetric\",\"Parallel\",\n \"Flowing\",\"Drifting\",\"Gliding\",\"Sailing\",\"Floating\",\"Climbing\",\"Leaping\",\"Bounding\",\n \"Sprinting\",\"Dashing\",\"Rushing\",\"Surging\",\"Cascading\",\"Rolling\",\"Tumbling\",\"Spinning\",\n \"Whirling\",\"Twisting\",\"Swirling\",\"Pulsing\",\"Beating\",\"Humming\",\"Buzzing\",\"Ringing\",\n \"Chiming\",\"Singing\",\"Dancing\",\"Swaying\",\"Waving\",\"Rippling\",\"Bubbling\",\"Fizzing\",\n \"Crackling\",\"Snapping\",\"Clicking\",\"Tapping\",\"Drumming\",\"Thrumming\",\"Vibrant\",\"Magnetic\",\n \"Electric\",\"Blazing\",\"Burning\",\"Fiery\",\"Volcanic\",\"Thermal\",\"Warming\",\"Cooling\",\n \"Chilling\",\"Brisk\",\"Crisp\",\"Breezy\",\"Gusty\",\"Windy\",\"Airy\",\"Light\",\n \"Buoyant\",\"Weightless\",\"Fleet\",\"Peppy\",\"Zippy\",\"Snappy\",\"Speedy\",\"Sonic\",\n \"Turbo\",\"Warp\",\"Express\",\"Instant\",\"Darting\",\"Flying\",\"Jetting\",\"Cruising\",\n \"Coasting\",\"Rhythmic\",\"Cycling\",\"Pacing\",\"Striding\",\"Marching\",\"Trotting\",\"Galloping\",\n \"Bouncing\",\"Vaulting\",\"Arching\",\"Launched\",\"Propelled\",\"Hovering\",\"Orbiting\",\"Revolving\",\n \"Rotating\",\"Pivoting\",\"Swinging\",\"Rocking\",\"Tilting\",\"Shifting\",\"Sliding\",\"Skating\",\n \"Surfing\",\"Diving\",\"Plunging\",\"Dipping\",\"Wading\",\"Celestial\",\"Ethereal\",\"Mystic\",\n \"Arcane\",\"Ancient\",\"Eternal\",\"Timeless\",\"Ageless\",\"Enduring\",\"Lasting\",\"Perpetual\",\n \"Legendary\",\"Mythic\",\"Epic\",\"Fabled\",\"Storied\",\"Historic\",\"Classic\",\"Vintage\",\n \"Retro\",\"Modern\",\"Future\",\"Digital\",\"Cyber\",\"Virtual\",\"Pixel\",\"Binary\",\n \"Omega\",\"Alpha\",\"Beta\",\"Gamma\",\"Sigma\",\"Theta\",\"Lambda\",\"Kappa\",\n \"Zeta\",\"Epsilon\",\"Omni\",\"Dual\",\"Triple\",\"Nexus\",\"Vertex\",\"Vector\",\n \"Matrix\",\"Cipher\",\"Enigma\",\"Phantom\",\"Mirage\",\"Dream\",\"Vision\",\"Oracle\",\n \"Prophet\",\"Sage\",\"Shaman\",\"Druid\",\"Artisan\",\"Maestro\",\"Virtuoso\",\"Savant\",\n \"Prodigy\",\"Maven\",\"Guru\",\"Mentor\",\"Guide\",\"Scout\",\"Pioneer\",\"Voyager\",\n \"Wanderer\",\"Nomad\",\"Rover\",\"Ranger\",\"Sentinel\",\"Guardian\",\"Keeper\",\"Warden\",\n \"Champion\",\"Vanguard\",\"Herald\",\"Emissary\",\"Envoy\",\"Ambassador\",\"Steward\",\"Curator\",\n \"Patron\",\"Benefactor\",\"Founder\",\"Architect\",\"Builder\",\"Maker\",\"Crafter\",\"Weaver\",\n \"Forger\",\"Smith\",\"Wright\",\"Mason\",\"Brewer\",\"Baker\",\"Tanner\",\"Dyer\",\n \"Scribe\",\"Bard\",\"Minstrel\",\"Troubadour\",\"Storyteller\",\"Chronicler\",\"Lorekeeper\",\"Archivist\",\n \"Tranquil\",\"Placid\",\"Hushed\",\"Muffled\",\"Soft\",\"Subtle\",\"Faint\",\"Dim\",\n \"Pale\",\"Warm\",\"Cool\",\"Taut\",\"Tense\",\"Cozy\",\"Homey\",\"Pastoral\",\n \"Sylvan\",\"Bucolic\",\"Idyllic\",\"Quaint\",\"Charming\",\"Lovely\",\"Pretty\",\"Dapper\",\n \"Natty\",\"Chic\",\"Posh\",\"Classy\",\"Fancy\",\"Ornate\",\"Lavish\",\"Opulent\",\n \"Majestic\",\"Dignified\",\"August\",\"Solemn\",\"Sober\",\"Heartfelt\",\"Genuine\",\"Authentic\",\n \"Novel\",\"Singular\",\"Distinct\",\"Chosen\",\"Select\",\"Premium\",\"Deluxe\",\"Superior\",\n \"Exquisite\",\"Superb\",\"Splendid\",\"Glorious\",\"Sublime\",\"Resonant\",\"Harmonic\",\"Melodic\",\n \"Lyrical\",\"Poetic\",\"Seamless\",\"Effortless\",\"Organic\",\"Primal\",\"Devoted\",\"Dedicated\",\n \"Committed\",\"Focused\",\"Determined\",\"Resolute\",\"Steadfast\",\"Unwavering\",\"Constant\",\"Faithful\",\n \"Reliable\",\"Dependable\",\"Trusty\",\"Anchored\",\"Moored\",\"Sheltered\",\"Protected\",\"Guarded\",\n \"Shielded\",\"Fortified\",\"Reinforced\",\"Braced\",\"Bolstered\",\"Supported\",\"Upheld\",\"Sustained\",\n \"Preserved\",\"Conserved\",\"Stored\",\"Vaulted\",\"Locked\",\"Secured\",\"Fastened\",\"Linked\",\n \"Joined\",\"Connected\",\"Paired\",\"Matched\",\"Balanced\",\"Aligned\",\"Centered\",\"Aimed\",\n \"Directed\",\"Guided\",\"Steered\",\"Piloted\",\"Navigated\",\"Charted\",\"Mapped\",\"Tracked\",\n \"Pursued\",\"Discovered\",\"Unveiled\",\"Displayed\",\"Presented\",\"Granted\",\"Bestowed\",\"Conferred\",\n \"Sapient\",\"Sentient\",\"Radiant\",\"Fertile\",\"Abundant\",\"Bountiful\",\"Plentiful\",\"Prolific\",\n \"Thriving\",\"Flourishing\",\"Blooming\",\"Budding\",\"Growing\",\"Expanding\",\"Advancing\",\"Progressing\",\n \"Evolving\",\"Maturing\",\"Ripening\",\"Developing\",\"Emerging\",\"Nascent\",\"Incipient\",\"Dawning\",\n \"Unfolding\",\"Awakening\",\"Stirring\",\"Kindling\",\"Igniting\",\"Sparking\",\"Triggering\",\"Launching\",\n \"Initiating\",\"Pioneering\",\"Trailblazing\",\"Groundbreaking\",\"Innovative\",\"Inventive\",\"Creative\",\"Imaginative\",\n \"Inspired\",\"Visionary\",\"Prophetic\",\"Prescient\",\"Insightful\",\"Perceptive\",\"Observant\",\"Watchful\",\n \"Vigilant\",\"Attentive\",\"Thoughtful\",\"Considerate\",\"Caring\",\"Nurturing\",\"Fostering\",\"Cultivating\",\n \"Tending\",\"Pruning\",\"Trimming\",\"Shaping\",\"Forming\",\"Molding\",\"Fashioning\",\"Designing\",\n \"Drafting\",\"Sketching\",\"Drawing\",\"Painting\",\"Coloring\",\"Tinting\",\"Shading\",\"Blending\",\n \"Mixing\",\"Merging\",\"Combining\",\"Uniting\",\"Fusing\",\"Melding\",\"Weaving\",\"Knitting\",\n \"Stitching\",\"Sewing\",\"Quilting\",\"Patching\",\"Mending\",\"Healing\",\"Restoring\",\"Renewing\",\n \"Reviving\",\"Refreshing\",\"Rejuvenating\",\"Invigorating\",\"Energizing\",\"Empowering\",\"Strengthening\",\"Fortifying\",\n \"Hardening\",\"Tempering\",\"Seasoning\",\"Curing\",\"Aging\",\"Mellowing\",\"Softening\",\"Smoothing\",\n \"Leveling\",\"Planing\",\"Sanding\",\"Buffing\",\"Burnishing\",\"Radiating\",\"Beaming\",\"Lighting\",\n \"Illuminating\",\"Brightening\",\"Clarifying\",\"Purifying\",\"Filtering\",\"Distilling\",\"Condensing\",\"Concentrating\",\n \"Focusing\",\"Directing\",\"Channeling\",\"Terraced\",\"Ascending\",\"Streaming\",\"Umber\",\"Careful\",\n \"Perfecting\",\"Glittering\",\"Twinkling\",\"Verdure\",\"Auroral\",\"Boreal\",\"Austral\",\"Temperate\",\n]);\n\n// ─── Nouns (1000) ───────────────────────────────────────────────\nexport const NOUNS: readonly string[] = Object.freeze([\n \"Falcon\",\"Hawk\",\"Eagle\",\"Owl\",\"Heron\",\"Crane\",\"Swan\",\"Dove\",\n \"Raven\",\"Finch\",\"Robin\",\"Wren\",\"Lark\",\"Jay\",\"Ibis\",\"Kite\",\n \"Osprey\",\"Condor\",\"Pelican\",\"Stork\",\"Sparrow\",\"Tern\",\"Puffin\",\"Parrot\",\n \"Toucan\",\"Kingfisher\",\"Flamingo\",\"Quail\",\"Pheasant\",\"Grouse\",\"Oriole\",\"Warbler\",\n \"Thrush\",\"Starling\",\"Magpie\",\"Swallow\",\"Martin\",\"Plover\",\"Curlew\",\"Sandpiper\",\n \"Wolf\",\"Fox\",\"Bear\",\"Stag\",\"Elk\",\"Moose\",\"Bison\",\"Lynx\",\n \"Cougar\",\"Panther\",\"Jaguar\",\"Leopard\",\"Tiger\",\"Lion\",\"Cheetah\",\"Gazelle\",\n \"Antelope\",\"Impala\",\"Zebra\",\"Giraffe\",\"Rhino\",\"Hippo\",\"Otter\",\"Beaver\",\n \"Badger\",\"Marten\",\"Ferret\",\"Mink\",\"Hare\",\"Rabbit\",\"Squirrel\",\"Chipmunk\",\n \"Porcupine\",\"Hedgehog\",\"Armadillo\",\"Pangolin\",\"Lemur\",\"Gibbon\",\"Tamarin\",\"Capybara\",\n \"Chinchilla\",\"Ocelot\",\"Margay\",\"Coati\",\"Kinkajou\",\"Tapir\",\"Okapi\",\"Kudu\",\n \"Oryx\",\"Chamois\",\"Orca\",\"Dolphin\",\"Whale\",\"Narwhal\",\"Walrus\",\"Seal\",\n \"Manatee\",\"Turtle\",\"Iguana\",\"Gecko\",\"Chameleon\",\"Newt\",\"Salamander\",\"Crab\",\n \"Lobster\",\"Seahorse\",\"Starfish\",\"Octopus\",\"Squid\",\"Jellyfish\",\"Stingray\",\"Barracuda\",\n \"Marlin\",\"Sailfish\",\"Trout\",\"Salmon\",\"Mantis\",\"Cricket\",\"Firefly\",\"Dragonfly\",\n \"Cedar\",\"Oak\",\"Pine\",\"Birch\",\"Maple\",\"Elm\",\"Ash\",\"Willow\",\n \"Cypress\",\"Redwood\",\"Sequoia\",\"Spruce\",\"Fir\",\"Larch\",\"Yew\",\"Beech\",\n \"Alder\",\"Poplar\",\"Aspen\",\"Walnut\",\"Hickory\",\"Teak\",\"Mahogany\",\"Ebony\",\n \"Bamboo\",\"Palm\",\"Acacia\",\"Baobab\",\"Banyan\",\"Olive\",\"Laurel\",\"Magnolia\",\n \"Lotus\",\"Orchid\",\"Iris\",\"Lily\",\"Rose\",\"Tulip\",\"Daisy\",\"Aster\",\n \"Dahlia\",\"Peony\",\"Jasmine\",\"Violet\",\"Clover\",\"Fern\",\"Moss\",\"Lichen\",\n \"Ivy\",\"Vine\",\"Reed\",\"Sage\",\"Basil\",\"Thyme\",\"Mint\",\"Dill\",\n \"Fennel\",\"Sorrel\",\"Yarrow\",\"Thistle\",\"Heather\",\"Bluebell\",\"Primrose\",\"Marigold\",\n \"Sunflower\",\"Zinnia\",\"Pansy\",\"Poppy\",\"Crocus\",\"Snowdrop\",\"Foxglove\",\"Honeysuckle\",\n \"Wisteria\",\"Hibiscus\",\"Plumeria\",\"Gardenia\",\"Camellia\",\"Begonia\",\"Azalea\",\"Oleander\",\n \"Canyon\",\"Ridge\",\"Peak\",\"Summit\",\"Cliff\",\"Bluff\",\"Mesa\",\"Butte\",\n \"Plateau\",\"Terrace\",\"Valley\",\"Basin\",\"Gorge\",\"Ravine\",\"Gulch\",\"Fjord\",\n \"Inlet\",\"Bay\",\"Cove\",\"Harbor\",\"Lagoon\",\"Reef\",\"Atoll\",\"Isle\",\n \"Peninsula\",\"Cape\",\"Shoal\",\"Bank\",\"Ledge\",\"Shelf\",\"Dune\",\"Desert\",\n \"Steppe\",\"Tundra\",\"Glacier\",\"Moraine\",\"Geyser\",\"Oasis\",\"Delta\",\"Estuary\",\n \"Marsh\",\"Bog\",\"Swamp\",\"Fen\",\"Moor\",\"Heath\",\"Meadow\",\"Prairie\",\n \"Savanna\",\"Glen\",\"Dale\",\"Dell\",\"Vale\",\"Hollow\",\"Grove\",\"Copse\",\n \"Thicket\",\"Taiga\",\"Mangrove\",\"Wetland\",\"Cascade\",\"Brook\",\"Creek\",\"Stream\",\n \"River\",\"Lake\",\"Pond\",\"Pool\",\"Tarn\",\"Loch\",\"Falls\",\"Fountain\",\n \"Grotto\",\"Cavern\",\"Cave\",\"Tunnel\",\"Arch\",\"Bridge\",\"Ford\",\"Pass\",\n \"Trail\",\"Path\",\"Route\",\"Caldera\",\"Crater\",\"Vent\",\"Spire\",\"Needle\",\n \"Dome\",\"Gateway\",\"Portal\",\"Threshold\",\"Verge\",\"Brink\",\"Edge\",\"Rim\",\n \"Brow\",\"Crest\",\"Promontory\",\"Headland\",\"Spit\",\"Tombolo\",\"Isthmus\",\"Strait\",\n \"Narrows\",\"Sound\",\"Bight\",\"Reach\",\"Stretch\",\"Expanse\",\"Clearing\",\"Glade\",\n \"Knoll\",\"Hillock\",\"Mound\",\"Tor\",\"Crag\",\"Scarp\",\"Escarpment\",\"Comet\",\n \"Meteor\",\"Asteroid\",\"Nebula\",\"Galaxy\",\"Quasar\",\"Pulsar\",\"Star\",\"Sun\",\n \"Moon\",\"Planet\",\"Orbit\",\"Eclipse\",\"Corona\",\"Flare\",\"Nova\",\"Cosmos\",\n \"Void\",\"Abyss\",\"Ether\",\"Zenith\",\"Nadir\",\"Horizon\",\"Aurora\",\"Meridian\",\n \"Equinox\",\"Solstice\",\"Phase\",\"Cycle\",\"Epoch\",\"Eon\",\"Era\",\"Dawn\",\n \"Dusk\",\"Twilight\",\"Night\",\"Noon\",\"Morning\",\"Evening\",\"Sunset\",\"Sunrise\",\n \"Daybreak\",\"Nightfall\",\"Starlight\",\"Moonbeam\",\"Sunray\",\"Skyline\",\"Firmament\",\"Canopy\",\n \"Infinity\",\"Vega\",\"Rigel\",\"Altair\",\"Deneb\",\"Sirius\",\"Polaris\",\"Arcturus\",\n \"Antares\",\"Lyra\",\"Orion\",\"Draco\",\"Phoenix\",\"Hydra\",\"Corvus\",\"Cygnus\",\n \"Aquila\",\"Andromeda\",\"Pegasus\",\"Perseus\",\"Gemini\",\"Centauri\",\"Cassiopeia\",\"Scorpius\",\n \"Sagittarius\",\"Capella\",\"Procyon\",\"Aldebaran\",\"Betelgeuse\",\"Spica\",\"Prism\",\"Quill\",\n \"Forge\",\"Anvil\",\"Helm\",\"Rune\",\"Atlas\",\"Compass\",\"Anchor\",\"Beacon\",\n \"Bell\",\"Bugle\",\"Drum\",\"Flute\",\"Harp\",\"Horn\",\"Lyre\",\"Pipe\",\n \"Gong\",\"Chime\",\"Cymbal\",\"Fiddle\",\"Trumpet\",\"Viola\",\"Cello\",\"Oboe\",\n \"Lute\",\"Mandolin\",\"Zither\",\"Sitar\",\"Banjo\",\"Lantern\",\"Torch\",\"Candle\",\n \"Lamp\",\"Globe\",\"Lens\",\"Scope\",\"Mirror\",\"Frame\",\"Easel\",\"Palette\",\n \"Brush\",\"Chisel\",\"Mallet\",\"Hammer\",\"Tongs\",\"Ladle\",\"Kettle\",\"Crucible\",\n \"Mortar\",\"Pestle\",\"Flask\",\"Vial\",\"Beaker\",\"Alembic\",\"Furnace\",\"Kiln\",\n \"Loom\",\"Shuttle\",\"Bobbin\",\"Spool\",\"Thimble\",\"Pin\",\"Clasp\",\"Buckle\",\n \"Brooch\",\"Pendant\",\"Amulet\",\"Talisman\",\"Charm\",\"Token\",\"Coin\",\"Medal\",\n \"Badge\",\"Shield\",\"Banner\",\"Flag\",\"Pennant\",\"Sigil\",\"Stamp\",\"Emblem\",\n \"Totem\",\"Icon\",\"Statue\",\"Obelisk\",\"Monolith\",\"Cairn\",\"Tablet\",\"Scroll\",\n \"Tome\",\"Codex\",\"Ledger\",\"Journal\",\"Chronicle\",\"Almanac\",\"Manual\",\"Gazette\",\n \"Folio\",\"Pamphlet\",\"Broadsheet\",\"Parchment\",\"Vellum\",\"Papyrus\",\"Inkwell\",\"Quiver\",\n \"Satchel\",\"Pouch\",\"Casket\",\"Coffer\",\"Chest\",\"Crate\",\"Barrel\",\"Quartz\",\n \"Opal\",\"Onyx\",\"Agate\",\"Garnet\",\"Topaz\",\"Beryl\",\"Zircon\",\"Spinel\",\n \"Peridot\",\"Jasper\",\"Amethyst\",\"Citrine\",\"Tourmaline\",\"Malachite\",\"Azurite\",\"Lapis\",\n \"Pyrite\",\"Galena\",\"Mica\",\"Talc\",\"Gypsum\",\"Calcite\",\"Dolomite\",\"Basalt\",\n \"Granite\",\"Marble\",\"Slate\",\"Shale\",\"Sandstone\",\"Limestone\",\"Obsidian\",\"Pumice\",\n \"Tuff\",\"Chert\",\"Flint\",\"Chalcedony\",\"Carnelian\",\"Sardonyx\",\"Moonstone\",\"Sunstone\",\n \"Labradorite\",\"Tanzanite\",\"Kunzite\",\"Rhodonite\",\"Sodalite\",\"Chrysocolla\",\"Aventurine\",\"Fluorite\",\n \"Seraphinite\",\"Charoite\",\"Sugilite\",\"Larimar\",\"Prehnite\",\"Danburite\",\"Scolecite\",\"Celestite\",\n \"Amazonite\",\"Howlite\",\"Lepidolite\",\"Storm\",\"Thunder\",\"Lightning\",\"Breeze\",\"Gale\",\n \"Squall\",\"Typhoon\",\"Cyclone\",\"Monsoon\",\"Tempest\",\"Zephyr\",\"Chinook\",\"Mistral\",\n \"Sirocco\",\"Foehn\",\"Bora\",\"Rain\",\"Drizzle\",\"Shower\",\"Downpour\",\"Deluge\",\n \"Flood\",\"Torrent\",\"Current\",\"Tide\",\"Wave\",\"Swell\",\"Surf\",\"Spray\",\n \"Foam\",\"Mist\",\"Fog\",\"Haze\",\"Dew\",\"Frost\",\"Ice\",\"Snow\",\n \"Sleet\",\"Hail\",\"Rime\",\"Thaw\",\"Flow\",\"Drift\",\"Eddy\",\"Vortex\",\n \"Whirl\",\"Spiral\",\"Funnel\",\"Column\",\"Plume\",\"Wisp\",\"Streak\",\"Band\",\n \"Front\",\"Trough\",\"Rainbow\",\"Halo\",\"Mirage\",\"Shimmer\",\"Glimmer\",\"Tower\",\n \"Turret\",\"Bastion\",\"Citadel\",\"Fortress\",\"Castle\",\"Palace\",\"Manor\",\"Lodge\",\n \"Cabin\",\"Cottage\",\"Villa\",\"Ranch\",\"Barn\",\"Silo\",\"Mill\",\"Foundry\",\n \"Workshop\",\"Studio\",\"Gallery\",\"Museum\",\"Library\",\"Archive\",\"Treasury\",\"Vault\",\n \"Chamber\",\"Hall\",\"Court\",\"Plaza\",\"Garden\",\"Balcony\",\"Porch\",\"Arcade\",\n \"Colonnade\",\"Pergola\",\"Pavilion\",\"Gazebo\",\"Kiosk\",\"Chapel\",\"Temple\",\"Shrine\",\n \"Monastery\",\"Abbey\",\"Cathedral\",\"Basilica\",\"Minaret\",\"Pagoda\",\"Stupa\",\"Pyramid\",\n \"Arena\",\"Stadium\",\"Forum\",\"Market\",\"Bazaar\",\"Emporium\",\"Depot\",\"Station\",\n \"Terminal\",\"Dock\",\"Wharf\",\"Pier\",\"Jetty\",\"Quay\",\"Marina\",\"Lighthouse\",\n \"Watchtower\",\"Outpost\",\"Camp\",\"Shelter\",\"Refuge\",\"Sanctuary\",\"Haven\",\"Retreat\",\n \"Nest\",\"Aerie\",\"Burrow\",\"Den\",\"Lair\",\"Roost\",\"Perch\",\"Bower\",\n \"Arbor\",\"Alcove\",\"Sextant\",\"Astrolabe\",\"Sundial\",\"Hourglass\",\"Pendulum\",\"Gyroscope\",\n \"Turbine\",\"Dynamo\",\"Generator\",\"Piston\",\"Valve\",\"Lever\",\"Pulley\",\"Winch\",\n \"Derrick\",\"Gantry\",\"Scaffold\",\"Trellis\",\"Lattice\",\"Grid\",\"Net\",\"Web\",\n \"Axle\",\"Gear\",\"Cog\",\"Sprocket\",\"Chain\",\"Link\",\"Cable\",\"Wire\",\n \"Thread\",\"Cord\",\"Rope\",\"Rigging\",\"Mast\",\"Boom\",\"Spar\",\"Keel\",\n \"Hull\",\"Rudder\",\"Tiller\",\"Wheel\",\"Chart\",\"Map\",\"Gauge\",\"Meter\",\n \"Scale\",\"Caliper\",\"Ruler\",\"Level\",\"Plumb\",\"Protractor\",\"Template\",\"Stencil\",\n \"Mold\",\"Die\",\"Lathe\",\"Bellows\",\"Retort\",\"Condenser\",\"Centrifuge\",\"Spectrometer\",\n \"Oscilloscope\",\"Theodolite\",\"Transit\",\"Sounding\",\"Probe\",\"Sensor\",\"Relay\",\"Switch\",\n \"Circuit\",\"Diode\",\"Quest\",\"Saga\",\"Legend\",\"Myth\",\"Fable\",\"Ballad\",\n \"Anthem\",\"Hymn\",\"Ode\",\"Sonnet\",\"Verse\",\"Stanza\",\"Canto\",\"Chorus\",\n \"Refrain\",\"Motif\",\"Theme\",\"Arc\",\"Prologue\",\"Epilogue\",\"Prelude\",\"Overture\",\n \"Finale\",\"Crescendo\",\"Cadence\",\"Tempo\",\"Rhythm\",\"Pulse\",\"Beat\",\"Tone\",\n \"Note\",\"Chord\",\"Harmony\",\"Melody\",\"Lyric\",\"Opus\",\"Suite\",\"Etude\",\n \"Fugue\",\"Canon\",\"March\",\"Waltz\",\"Rondo\",\"Aria\",\"Duet\",\"Trio\",\n \"Quartet\",\"Ensemble\",\"Guild\",\"League\",\"Order\",\"Council\",\"Assembly\",\"Conclave\",\n \"Synod\",\"Quorum\",\"Cohort\",\"Legion\",\"Brigade\",\"Battalion\",\"Regiment\",\"Division\",\n \"Corps\",\"Fleet\",\"Squadron\",\"Patrol\",\"Convoy\",\"Caravan\",\"Expedition\",\"Voyage\",\n \"Journey\",\"Trek\",\"Odyssey\",\"Passage\",\"Crossing\",\"Venture\",\"Enterprise\",\"Mission\",\n \"Campaign\",\"Crusade\",\"Pilgrimage\",\"Safari\",\"Sortie\",\"Foray\",\"Rally\",\"Charge\",\n \"Advance\",\"Concord\",\"Ember\",\"Blaze\",\"Inferno\",\"Pyre\",\"Spark\",\"Cinder\",\n \"Smoke\",\"Vapor\",\"Steam\",\"Nimbus\",\"Cumulus\",\"Cirrus\",\"Stratus\",\"Billow\",\n \"Puff\",\"Wake\",\"Ripple\",\"Surge\",\"Ebb\",\"Flux\",\"Gush\",\"Rush\",\n \"Spring\",\"Well\",\"Font\",\"Source\",\"Origin\",\"Root\",\"Seed\",\"Sprout\",\n \"Bud\",\"Bloom\",\"Petal\",\"Leaf\",\"Branch\",\"Limb\",\"Trunk\",\"Bark\",\n \"Grain\",\"Fiber\",\"Pulp\",\"Core\",\"Sap\",\"Resin\",\"Nectar\",\"Pollen\",\n \"Spore\",\"Frond\",\"Tendril\",\"Runner\",\"Shoot\",\"Stalk\",\"Stem\",\"Thorn\",\n \"Burr\",\"Cone\",\"Acorn\",\"Pinecone\",\"Nutshell\",\"Keystone\",\"Capstone\",\"Milestone\",\n \"Cornerstone\",\"Foundation\",\"Bedrock\",\"Pillar\",\"Buttress\",\"Parapet\",\"Battlement\",\"Barbican\",\n \"Gatehouse\",\"Drawbridge\",\"Portcullis\",\"Moat\",\"Stockade\",\"Palisade\",\"Bulwark\",\"Levee\",\n \"Embankment\",\"Causeway\",\"Aqueduct\",\"Viaduct\",\"Trestle\",\"Span\",\"Lintel\",\"Plinth\",\n \"Pedestal\",\"Dais\",\"Rostrum\",\"Podium\",\"Stage\",\"Platform\",\"Deck\",\"Landing\",\n \"Berth\",\"Channel\",\"Lock\",\"Weir\",\"Dam\",\"Spillway\",\"Flume\",\"Chute\",\n \"Sluice\",\"Nozzle\",\"Spout\",\"Faucet\",\"Cistern\",\"Wellspring\",\"Headwater\",\"Watershed\",\n \"Alluvium\",\"Loam\",\"Humus\",\"Peat\",\"Marl\",\"Silt\",\"Writ\",\"Clamp\",\n \"Eyepiece\",\"Traverse\",\"Stride\",\"Parley\",\"Char\",\"Trace\",\"Confluence\",\"Rampart\",\n]);\n\n// ─── Blocked Combinations ──────────────────────────────────────\n// Adjective+Noun pairs that form offensive or inappropriate words\n// when concatenated. Checked at derivation time; PRNG advances\n// deterministically to produce a clean replacement.\nexport const BLOCKED_COMBOS: ReadonlySet<string> = Object.freeze(\n new Set<string>([\n // Add any discovered offensive adj+noun combinations here.\n // Format: \"AdjectiveNoun\" (PascalCase, concatenated)\n ]),\n);\n","// ═══════════════════════════════════════════════════════════════\n// SolNames v1 — Name Derivation Engine\n// SHA-256(\"solnames-v1:\" + wallet) → PRNG → adjective + noun\n// ═══════════════════════════════════════════════════════════════\n\nimport { sha256, sha256Hex } from \"./sha256\";\nimport { ADJECTIVES, NOUNS, BLOCKED_COMBOS, SOLNAMES_VERSION } from \"./constants\";\nimport type { NameFormat, SolNameIdentity } from \"./constants\";\n\nfunction mulberry32(seed: number): () => number {\n let a = seed | 0;\n return () => {\n a = (a + 0x6d2b79f5) | 0;\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\nconst DOMAIN = `solnames-${SOLNAMES_VERSION}:`;\n\n/** Options for customizing name derivation. */\nexport interface DeriveOptions {\n /** Custom adjective word list (default: built-in 1000 adjectives) */\n adjectives?: readonly string[];\n /** Custom noun word list (default: built-in 1000 nouns) */\n nouns?: readonly string[];\n /** Custom blocked adjective+noun combinations (default: built-in set) */\n blockedCombos?: Set<string>;\n /** Custom domain prefix for SHA-256 hashing (default: \"solnames-v1\") */\n domain?: string;\n}\n\n/**\n * Derive a deterministic name from a Solana wallet address.\n *\n * @param wallet Base58 wallet address\n * @param format Name format (default: \"display\")\n * @param options Custom word lists, domain, or blocked combos\n * @returns Formatted name string\n */\nexport function deriveName(\n wallet: string,\n format: NameFormat = \"display\",\n options?: DeriveOptions,\n): string {\n const id = deriveIdentity(wallet, options);\n switch (format) {\n case \"short\":\n return id.short;\n case \"display\":\n return id.name;\n case \"tag\":\n return id.tag;\n case \"full\":\n return id.full;\n }\n}\n\n/**\n * Derive the full identity bundle for a wallet address.\n * Returns all four name formats plus component parts.\n */\nexport function deriveIdentity(\n wallet: string,\n options?: DeriveOptions,\n): SolNameIdentity {\n const adjectives = options?.adjectives ?? ADJECTIVES;\n const nouns = options?.nouns ?? NOUNS;\n const blocked = options?.blockedCombos ?? BLOCKED_COMBOS;\n const domain = options?.domain ? `${options.domain}:` : DOMAIN;\n\n const hash = sha256(domain + wallet);\n const hex = sha256Hex(domain + wallet);\n\n // Seed PRNG from first 4 bytes (big-endian)\n const seed =\n ((hash[0] << 24) | (hash[1] << 16) | (hash[2] << 8) | hash[3]) >>> 0;\n const rng = mulberry32(seed);\n\n // Pick first adj+noun pair, retrying if blocked\n let adj1 = adjectives[Math.floor(rng() * adjectives.length)];\n let noun1 = nouns[Math.floor(rng() * nouns.length)];\n while (blocked.has(adj1 + noun1)) {\n adj1 = adjectives[Math.floor(rng() * adjectives.length)];\n noun1 = nouns[Math.floor(rng() * nouns.length)];\n }\n\n // Pick second adj+noun pair for full format\n const adj2 = adjectives[Math.floor(rng() * adjectives.length)];\n const noun2 = nouns[Math.floor(rng() * nouns.length)];\n\n // Discriminator from bytes 8-9 (4 hex chars)\n const discriminator = hex.slice(16, 20);\n\n return {\n short: adj1,\n name: adj1 + noun1,\n tag: adj1 + noun1 + \"#\" + discriminator,\n full: adj1 + noun1 + \"-\" + adj2 + noun2,\n adjective: adj1,\n noun: noun1,\n hash: hex,\n discriminator,\n };\n}\n","// ═══════════════════════════════════════════════════════════════\n// SolNames v1 — Name Validation & Parsing\n// ═══════════════════════════════════════════════════════════════\n\nimport { ADJECTIVES, NOUNS } from \"./constants\";\n\nconst adjSet = new Set(ADJECTIVES);\nconst nounSet = new Set(NOUNS);\n\nexport interface ParsedSolName {\n adjective: string;\n noun: string;\n discriminator?: string;\n}\n\n/**\n * Check if a string is a valid SolName (display, tag, or full format).\n */\nexport function isValidSolName(name: string): boolean {\n return parseSolName(name) !== null;\n}\n\n/**\n * Parse a SolName string into its component parts.\n * Supports display (\"SunnyIcon\"), tag (\"SunnyIcon#2f95\"),\n * and full (\"SunnyIcon-InfiniteOre\") formats.\n *\n * Returns null if the name doesn't match any valid format.\n */\nexport function parseSolName(\n name: string,\n): ParsedSolName | null {\n // Tag format: AdjNoun#xxxx\n const tagMatch = name.match(/^([A-Z][a-z]+)([A-Z][a-z]+)#([0-9a-f]{4})$/);\n if (tagMatch) {\n const [, adj, noun, disc] = tagMatch;\n if (adjSet.has(adj) && nounSet.has(noun)) {\n return { adjective: adj, noun, discriminator: disc };\n }\n return null;\n }\n\n // Full format: AdjNoun-AdjNoun\n const fullMatch = name.match(\n /^([A-Z][a-z]+)([A-Z][a-z]+)-([A-Z][a-z]+)([A-Z][a-z]+)$/,\n );\n if (fullMatch) {\n const [, adj1, noun1] = fullMatch;\n if (adjSet.has(adj1) && nounSet.has(noun1)) {\n return { adjective: adj1, noun: noun1 };\n }\n return null;\n }\n\n // Display format: AdjNoun\n const displayMatch = name.match(/^([A-Z][a-z]+)([A-Z][a-z]+)$/);\n if (displayMatch) {\n const [, adj, noun] = displayMatch;\n if (adjSet.has(adj) && nounSet.has(noun)) {\n return { adjective: adj, noun };\n }\n return null;\n }\n\n return null;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk6UWILY7E_cjs = require('./chunk-6UWILY7E.cjs');
3
+ var chunkF54WHRCE_cjs = require('./chunk-F54WHRCE.cjs');
4
4
 
5
5
  // src/core/describe.ts
6
6
  var SKIN_TONES = {
@@ -104,7 +104,7 @@ var BG_COLORS_DESC = {
104
104
  9: "blush"
105
105
  };
106
106
  function describeAppearance(walletAddress, options) {
107
- const traits = chunk6UWILY7E_cjs.generateTraits(walletAddress);
107
+ const traits = chunkF54WHRCE_cjs.generateTraits(walletAddress);
108
108
  const {
109
109
  includeBackground = true,
110
110
  format = "paragraph",
@@ -128,7 +128,7 @@ function describeTraits(traits, options) {
128
128
  }
129
129
  function buildParagraph(t, perspective, name, includeBg) {
130
130
  const parts = [];
131
- const ai = chunk6UWILY7E_cjs.effectiveAccessory(t);
131
+ const ai = chunkF54WHRCE_cjs.effectiveAccessory(t);
132
132
  const subject = perspective === "first" ? name ? `I'm ${name}. I have` : "I have" : name ? `${name} has` : "This SolFace has";
133
133
  const im = perspective === "first" ? "I'm" : "They're";
134
134
  parts.push(`${subject} a squircle face with ${SKIN_TONES[t.skinColor] ?? "warm"} skin`);
@@ -140,7 +140,7 @@ function buildParagraph(t, perspective, name, includeBg) {
140
140
  const hairStyle = HAIR_STYLES[t.hairStyle] ?? "";
141
141
  const hairColor = HAIR_COLORS_DESC[t.hairColor] ?? "";
142
142
  if (t.hairStyle === 0) {
143
- parts.push("and is bald");
143
+ parts.push(perspective === "first" ? "and am bald" : "and is bald");
144
144
  } else if (hairStyle.startsWith("a ")) {
145
145
  parts.push(`and a ${hairColor} ${hairStyle.slice(2)}`);
146
146
  } else {
@@ -172,7 +172,7 @@ function buildParagraph(t, perspective, name, includeBg) {
172
172
  return desc;
173
173
  }
174
174
  function buildStructured(t, includeBg) {
175
- const ai = chunk6UWILY7E_cjs.effectiveAccessory(t);
175
+ const ai = chunkF54WHRCE_cjs.effectiveAccessory(t);
176
176
  const lines = [
177
177
  `Face: squircle`,
178
178
  `Skin: ${SKIN_TONES[t.skinColor] ?? "warm"}`,
@@ -197,7 +197,7 @@ function buildStructured(t, includeBg) {
197
197
  return lines.join("\n");
198
198
  }
199
199
  function buildCompact(t) {
200
- const ai = chunk6UWILY7E_cjs.effectiveAccessory(t);
200
+ const ai = chunkF54WHRCE_cjs.effectiveAccessory(t);
201
201
  const parts = [];
202
202
  parts.push(`squircle face`);
203
203
  parts.push(`${SKIN_TONES[t.skinColor] ?? "warm"} skin`);
@@ -205,7 +205,8 @@ function buildCompact(t) {
205
205
  if (t.hairStyle === 0) {
206
206
  parts.push("bald");
207
207
  } else {
208
- const hs = (HAIR_STYLES[t.hairStyle] ?? "hair").replace(/,.*/, "");
208
+ const raw = HAIR_STYLES[t.hairStyle] ?? "hair";
209
+ const hs = raw.includes(",") ? raw.replace(/.*,\s*/, "") : raw;
209
210
  const hc = HAIR_COLORS_DESC[t.hairColor] ?? "";
210
211
  parts.push(`${hc} ${hs.startsWith("a ") ? hs.slice(2) : hs}`);
211
212
  }
@@ -239,5 +240,5 @@ exports.agentAppearancePrompt = agentAppearancePrompt;
239
240
  exports.describeAppearance = describeAppearance;
240
241
  exports.describeTraits = describeTraits;
241
242
  exports.solFaceAltText = solFaceAltText;
242
- //# sourceMappingURL=chunk-46ZEFA6R.cjs.map
243
- //# sourceMappingURL=chunk-46ZEFA6R.cjs.map
243
+ //# sourceMappingURL=chunk-TYTBYDQU.cjs.map
244
+ //# sourceMappingURL=chunk-TYTBYDQU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/describe.ts"],"names":["generateTraits","effectiveAccessory"],"mappings":"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","file":"chunk-TYTBYDQU.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES v2 — AI Agent Description Generator\n// Produces natural language descriptions of a wallet's SolFace\n// for use in system prompts, bios, and self-reference.\n// ═══════════════════════════════════════════════════════════════\n\nimport { generateTraits, effectiveAccessory, type SolFaceTraits } from \"./traits\";\n\n// ─── Vocabulary Maps ─────────────────────────────────────────\n\nconst SKIN_TONES: Record<number, string> = {\n 0: \"porcelain\",\n 1: \"ivory\",\n 2: \"fair\",\n 3: \"light\",\n 4: \"sand\",\n 5: \"golden\",\n 6: \"warm\",\n 7: \"caramel\",\n 8: \"brown\",\n 9: \"deep\",\n};\n\nconst EYE_STYLES: Record<number, string> = {\n 0: \"round, wide-open\",\n 1: \"small and minimal\",\n 2: \"almond-shaped\",\n 3: \"wide and expressive\",\n 4: \"relaxed, half-lidded\",\n 5: \"joyful, crescent-shaped\",\n 6: \"bright and sparkling\",\n 7: \"gentle and narrow\",\n};\n\nconst EYE_COLORS_DESC: Record<number, string> = {\n 0: \"dark brown\",\n 1: \"blue\",\n 2: \"green\",\n 3: \"hazel\",\n 4: \"gray\",\n};\n\nconst EYEBROW_STYLES: Record<number, string> = {\n 0: \"wispy\",\n 1: \"straight\",\n 2: \"natural\",\n 3: \"elegantly arched\",\n 4: \"sharply angled\",\n};\n\nconst NOSE_STYLES: Record<number, string> = {\n 0: \"a subtle shadow nose\",\n 1: \"a small button nose\",\n 2: \"a soft curved nose\",\n 3: \"a button nose with visible nostrils\",\n};\n\nconst MOUTH_STYLES: Record<number, string> = {\n 0: \"a gentle smile\",\n 1: \"a calm, neutral expression\",\n 2: \"a happy grin\",\n 3: \"a surprised O-shaped mouth\",\n 4: \"a confident smirk\",\n 5: \"a wide, toothy grin\",\n 6: \"a flat, straight expression\",\n 7: \"a soft pout\",\n};\n\nconst HAIR_STYLES: Record<number, string> = {\n 0: \"bald, with no hair\",\n 1: \"short, neatly cropped hair\",\n 2: \"bouncy, curly hair\",\n 3: \"side-swept hair\",\n 4: \"a voluminous puff\",\n 5: \"long hair that falls past the shoulders\",\n 6: \"a clean bob cut\",\n 7: \"a close buzz cut\",\n 8: \"flowing, wavy hair\",\n 9: \"a neat topknot\",\n};\n\nconst HAIR_COLORS_DESC: Record<number, string> = {\n 0: \"jet black\",\n 1: \"espresso brown\",\n 2: \"walnut\",\n 3: \"honey blonde\",\n 4: \"copper red\",\n 5: \"silver\",\n 6: \"charcoal\",\n 7: \"burgundy\",\n 8: \"strawberry\",\n 9: \"ginger\",\n};\n\nconst ACCESSORY_DESC: Record<number, string> = {\n 0: \"\",\n 1: \"a beauty mark\",\n 2: \"round glasses\",\n 3: \"rectangular glasses\",\n 4: \"a dangling earring\",\n 5: \"a headband\",\n 6: \"freckles\",\n 7: \"stud earrings\",\n 8: \"aviator sunglasses\",\n 9: \"a band-aid\",\n};\n\nconst BG_COLORS_DESC: Record<number, string> = {\n 0: \"rose\",\n 1: \"olive\",\n 2: \"sage\",\n 3: \"fern\",\n 4: \"mint\",\n 5: \"ocean\",\n 6: \"sky\",\n 7: \"lavender\",\n 8: \"orchid\",\n 9: \"blush\",\n};\n\n// ─── Description Builder ─────────────────────────────────────\n\nexport interface DescribeOptions {\n includeBackground?: boolean;\n format?: \"paragraph\" | \"structured\" | \"compact\";\n perspective?: \"first\" | \"third\";\n name?: string;\n}\n\nexport function describeAppearance(\n walletAddress: string,\n options?: DescribeOptions,\n): string {\n const traits = generateTraits(walletAddress);\n const {\n includeBackground = true,\n format = \"paragraph\",\n perspective = \"third\",\n name,\n } = options ?? {};\n\n if (format === \"structured\") return buildStructured(traits, includeBackground);\n if (format === \"compact\") return buildCompact(traits);\n return buildParagraph(traits, perspective, name, includeBackground);\n}\n\nexport function describeTraits(\n traits: SolFaceTraits,\n options?: DescribeOptions,\n): string {\n const {\n includeBackground = true,\n format = \"paragraph\",\n perspective = \"third\",\n name,\n } = options ?? {};\n\n if (format === \"structured\") return buildStructured(traits, includeBackground);\n if (format === \"compact\") return buildCompact(traits);\n return buildParagraph(traits, perspective, name, includeBackground);\n}\n\n// ─── Builders ────────────────────────────────────────────────\n\nfunction buildParagraph(\n t: SolFaceTraits,\n perspective: \"first\" | \"third\",\n name?: string,\n includeBg?: boolean,\n): string {\n const parts: string[] = [];\n const ai = effectiveAccessory(t);\n\n const subject = perspective === \"first\"\n ? (name ? `I'm ${name}. I have` : \"I have\")\n : (name ? `${name} has` : \"This SolFace has\");\n\n const im = perspective === \"first\" ? \"I'm\" : \"They're\";\n\n // Face + skin (all squircle now)\n parts.push(`${subject} a squircle face with ${SKIN_TONES[t.skinColor] ?? \"warm\"} skin`);\n\n // Eyes\n const eyeStyle = EYE_STYLES[t.eyeStyle] ?? \"round\";\n const eyeColor = EYE_COLORS_DESC[t.eyeColor] ?? \"dark\";\n parts.push(`${eyeStyle} ${eyeColor} eyes`);\n\n // Eyebrows\n const brows = EYEBROW_STYLES[t.eyebrows];\n if (brows) parts.push(`${brows} eyebrows`);\n\n // Hair\n const hairStyle = HAIR_STYLES[t.hairStyle] ?? \"\";\n const hairColor = HAIR_COLORS_DESC[t.hairColor] ?? \"\";\n if (t.hairStyle === 0) {\n parts.push(perspective === \"first\" ? \"and am bald\" : \"and is bald\");\n } else if (hairStyle.startsWith(\"a \")) {\n parts.push(`and a ${hairColor} ${hairStyle.slice(2)}`);\n } else {\n parts.push(`and ${hairColor} ${hairStyle}`);\n }\n\n // Build main sentence\n let desc = parts[0];\n if (parts.length > 2) {\n desc += \", \" + parts.slice(1, -1).join(\", \") + \", \" + parts[parts.length - 1];\n } else if (parts.length === 2) {\n desc += \" and \" + parts[1];\n }\n desc += \".\";\n\n // Nose\n const nose = NOSE_STYLES[t.nose];\n if (nose) {\n const noseSubject = perspective === \"first\"\n ? \"I have\"\n : (name ?? \"They\") + (name ? \" has\" : \" have\");\n desc += ` ${noseSubject} ${nose}.`;\n }\n\n // Accessory\n const acc = ACCESSORY_DESC[ai];\n if (acc) {\n desc += ` ${im} wearing ${acc}.`;\n }\n\n // Mouth\n const mouth = MOUTH_STYLES[t.mouth] ?? \"a smile\";\n const mouthVerb = perspective === \"first\"\n ? \"I have\"\n : (name ?? \"They\") + (name ? \" has\" : \" have\");\n desc += ` ${mouthVerb} ${mouth}.`;\n\n // Background\n if (includeBg) {\n const bg = BG_COLORS_DESC[t.bgColor] ?? \"colorful\";\n desc += ` The background is ${bg}.`;\n }\n\n return desc;\n}\n\nfunction buildStructured(t: SolFaceTraits, includeBg: boolean): string {\n const ai = effectiveAccessory(t);\n const lines: string[] = [\n `Face: squircle`,\n `Skin: ${SKIN_TONES[t.skinColor] ?? \"warm\"}`,\n `Eyes: ${EYE_STYLES[t.eyeStyle] ?? \"round\"}, ${EYE_COLORS_DESC[t.eyeColor] ?? \"dark\"}`,\n `Eyebrows: ${EYEBROW_STYLES[t.eyebrows] ?? \"wispy\"}`,\n ];\n\n const nose = NOSE_STYLES[t.nose];\n if (nose) lines.push(`Nose: ${nose.replace(/^a /, \"\")}`);\n\n lines.push(`Mouth: ${MOUTH_STYLES[t.mouth] ?? \"smile\"}`);\n\n if (t.hairStyle === 0) {\n lines.push(\"Hair: bald\");\n } else {\n const hs = HAIR_STYLES[t.hairStyle] ?? \"\";\n const hc = HAIR_COLORS_DESC[t.hairColor] ?? \"\";\n lines.push(`Hair: ${hc} ${hs.startsWith(\"a \") ? hs.slice(2) : hs}`);\n }\n\n const acc = ACCESSORY_DESC[ai];\n if (acc) lines.push(`Accessory: ${acc}`);\n\n if (includeBg) {\n lines.push(`Background: ${BG_COLORS_DESC[t.bgColor] ?? \"colorful\"}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction buildCompact(t: SolFaceTraits): string {\n const ai = effectiveAccessory(t);\n const parts: string[] = [];\n\n parts.push(`squircle face`);\n parts.push(`${SKIN_TONES[t.skinColor] ?? \"warm\"} skin`);\n parts.push(`${EYE_COLORS_DESC[t.eyeColor] ?? \"dark\"} ${EYE_STYLES[t.eyeStyle] ?? \"round\"} eyes`);\n\n if (t.hairStyle === 0) {\n parts.push(\"bald\");\n } else {\n const raw = HAIR_STYLES[t.hairStyle] ?? \"hair\";\n const hs = raw.includes(\",\") ? raw.replace(/.*,\\s*/, \"\") : raw;\n const hc = HAIR_COLORS_DESC[t.hairColor] ?? \"\";\n parts.push(`${hc} ${hs.startsWith(\"a \") ? hs.slice(2) : hs}`);\n }\n\n const acc = ACCESSORY_DESC[ai];\n if (acc) parts.push(acc);\n\n parts.push((MOUTH_STYLES[t.mouth] ?? \"smiling\").replace(/^a /, \"\"));\n\n return parts.join(\", \");\n}\n\n// ─── Alt Text Helper ─────────────────────────────────────────\n\nexport function solFaceAltText(walletAddress: string): string {\n return `SolFace avatar: ${describeAppearance(walletAddress, { format: \"compact\", includeBackground: false })}`;\n}\n\n// ─── System Prompt Helper ────────────────────────────────────\n\nexport function agentAppearancePrompt(\n walletAddress: string,\n agentName?: string,\n): string {\n const desc = describeAppearance(walletAddress, {\n perspective: \"first\",\n name: agentName,\n includeBackground: false,\n format: \"paragraph\",\n });\n\n const hash = (djb2Simple(walletAddress) >>> 0).toString(16).padStart(8, \"0\");\n\n return `My visual identity is a SolFace avatar (ID: ${hash}) derived from my wallet address. ${desc} This appearance is deterministic — anyone who looks up my wallet will see the same face.`;\n}\n\n// Inline djb2 to avoid circular dependency\nfunction djb2Simple(str: string): number {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0;\n }\n return hash >>> 0;\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunk6UWILY7E_cjs = require('./chunk-6UWILY7E.cjs');
3
+ var chunkF54WHRCE_cjs = require('./chunk-F54WHRCE.cjs');
4
4
 
5
5
  // src/core/rasterize.ts
6
6
  async function renderSolFacePNG(walletAddress, options) {
7
7
  const { pngSize = 256, ...renderOpts } = options ?? {};
8
- const svg = chunk6UWILY7E_cjs.renderSolFaceSVG(walletAddress, {
8
+ const svg = chunkF54WHRCE_cjs.renderSolFaceSVG(walletAddress, {
9
9
  ...renderOpts,
10
10
  size: pngSize
11
11
  });
@@ -30,7 +30,7 @@ async function renderSolFacePNG(walletAddress, options) {
30
30
  }
31
31
  async function renderSolFacePNGBrowser(walletAddress, options) {
32
32
  const { pngSize = 256, ...renderOpts } = options ?? {};
33
- const svg = chunk6UWILY7E_cjs.renderSolFaceSVG(walletAddress, {
33
+ const svg = chunkF54WHRCE_cjs.renderSolFaceSVG(walletAddress, {
34
34
  ...renderOpts,
35
35
  size: pngSize
36
36
  });
@@ -75,7 +75,7 @@ async function renderSolFacePNGBrowser(walletAddress, options) {
75
75
  }
76
76
  async function renderSolFacePNGDataURL(walletAddress, options) {
77
77
  const { pngSize = 256, ...renderOpts } = options ?? {};
78
- const svg = chunk6UWILY7E_cjs.renderSolFaceSVG(walletAddress, {
78
+ const svg = chunkF54WHRCE_cjs.renderSolFaceSVG(walletAddress, {
79
79
  ...renderOpts,
80
80
  size: pngSize
81
81
  });
@@ -107,5 +107,5 @@ async function renderSolFacePNGDataURL(walletAddress, options) {
107
107
  exports.renderSolFacePNG = renderSolFacePNG;
108
108
  exports.renderSolFacePNGBrowser = renderSolFacePNGBrowser;
109
109
  exports.renderSolFacePNGDataURL = renderSolFacePNGDataURL;
110
- //# sourceMappingURL=chunk-546TBMAR.cjs.map
111
- //# sourceMappingURL=chunk-546TBMAR.cjs.map
110
+ //# sourceMappingURL=chunk-WIXGHS77.cjs.map
111
+ //# sourceMappingURL=chunk-WIXGHS77.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/rasterize.ts"],"names":["renderSolFaceSVG"],"mappings":";;;;;AAoCA,eAAsB,gBAAA,CACpB,eACA,OAAA,EACiB;AACjB,EAAA,MAAM,EAAE,OAAA,GAAU,GAAA,EAAK,GAAG,UAAA,EAAW,GAAI,WAAW,EAAC;AAGrD,EAAA,MAAM,GAAA,GAAMA,mCAAiB,aAAA,EAAe;AAAA,IAC1C,GAAG,UAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACP,CAAA;AACD,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAGjC,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,OAAO,CAAA;AAClC,IAAA,OAAO,MAAM,KAAA,CACV,OAAA,CAAQ,SAAS,CAAA,CACjB,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA,CACvB,GAAA,EAAI,CACJ,QAAA,EAAS;AAAA,EACd,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAO,iBAAiB,CAAA;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,GAAA,EAAK;AAAA,MAC3B,KAAA,EAAO,EAAE,IAAA,EAAM,OAAA,EAAS,OAAO,OAAA;AAAQ,KACxC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,EAAO;AAC7B,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GAEF;AACF;AAiBA,eAAsB,uBAAA,CACpB,eACA,OAAA,EACe;AACf,EAAA,MAAM,EAAE,OAAA,GAAU,GAAA,EAAK,GAAG,UAAA,EAAW,GAAI,WAAW,EAAC;AAErD,EAAA,MAAM,GAAA,GAAMA,mCAAiB,aAAA,EAAe;AAAA,IAC1C,GAAG,UAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACP,CAAA;AAGD,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,CAAC,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,6BAAA,EAA+B,CAAA;AACvE,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,OAAO,CAAA;AAEvC,EAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC5C,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,EAAM;AACtB,IAAA,GAAA,CAAI,SAAS,MAAM;AAEjB,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,GAAA;AAEJ,MAAA,IAAI,OAAO,oBAAoB,WAAA,EAAa;AAC1C,QAAA,MAAA,GAAS,IAAI,eAAA,CAAgB,OAAA,EAAS,OAAO,CAAA;AAC7C,QAAA,GAAA,GAAM,MAAA,CAAO,WAAW,IAAI,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,QAAA,CAAS,cAAc,QAAQ,CAAA;AACxC,QAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AACf,QAAA,MAAA,CAAO,MAAA,GAAS,OAAA;AAChB,QAAA,GAAA,GAAM,MAAA,CAAO,WAAW,IAAI,CAAA;AAAA,MAC9B;AAEA,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACvB,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,yCAAyC,CAAC,CAAA;AAC3D,QAAA;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,SAAS,OAAO,CAAA;AACzC,MAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AAEvB,MAAA,IAAI,kBAAkB,eAAA,EAAiB;AACrC,QAAA,MAAA,CAAO,aAAA,CAAc,EAAE,IAAA,EAAM,WAAA,EAAa,EAAE,IAAA,CAAK,OAAO,CAAA,CAAE,KAAA,CAAM,MAAM,CAAA;AAAA,MACxE,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,MAAA,CAAO,CAAC,IAAA,KAAS;AACtB,UAAA,IAAI,IAAA,UAAc,IAAI,CAAA;AAAA,eACjB,MAAA,CAAO,IAAI,KAAA,CAAM,iCAAiC,CAAC,CAAA;AAAA,QAC1D,GAAG,WAAW,CAAA;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACvB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,0CAA0C,CAAC,CAAA;AAAA,IAC9D,CAAA;AAEA,IAAA,GAAA,CAAI,GAAA,GAAM,GAAA;AAAA,EACZ,CAAC,CAAA;AACH;AAMA,eAAsB,uBAAA,CACpB,eACA,OAAA,EACiB;AACjB,EAAA,MAAM,EAAE,OAAA,GAAU,GAAA,EAAK,GAAG,UAAA,EAAW,GAAI,WAAW,EAAC;AAErD,EAAA,MAAM,GAAA,GAAMA,mCAAiB,aAAA,EAAe;AAAA,IAC1C,GAAG,UAAA;AAAA,IACH,IAAA,EAAM;AAAA,GACP,CAAA;AAED,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,CAAK,CAAC,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,6BAAA,EAA+B,CAAA;AACvE,EAAA,MAAM,GAAA,GAAM,GAAA,CAAI,eAAA,CAAgB,OAAO,CAAA;AAEvC,EAAA,OAAO,IAAI,OAAA,CAAgB,CAAC,OAAA,EAAS,MAAA,KAAW;AAC9C,IAAA,MAAM,GAAA,GAAM,IAAI,KAAA,EAAM;AACtB,IAAA,GAAA,CAAI,SAAS,MAAM;AACjB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,MAAA,MAAA,CAAO,KAAA,GAAQ,OAAA;AACf,MAAA,MAAA,CAAO,MAAA,GAAS,OAAA;AAChB,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA;AAClC,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,8BAA8B,CAAC,CAAA;AAChD,QAAA;AAAA,MACF;AACA,MAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,CAAA,EAAG,CAAA,EAAG,SAAS,OAAO,CAAA;AACzC,MAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACvB,MAAA,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,WAAW,CAAC,CAAA;AAAA,IACvC,CAAA;AACA,IAAA,GAAA,CAAI,UAAU,MAAM;AAClB,MAAA,GAAA,CAAI,gBAAgB,GAAG,CAAA;AACvB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,4BAA4B,CAAC,CAAA;AAAA,IAChD,CAAA;AACA,IAAA,GAAA,CAAI,GAAA,GAAM,GAAA;AAAA,EACZ,CAAC,CAAA;AACH","file":"chunk-546TBMAR.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES — PNG Rasterizer\n// Converts SolFace SVGs to PNG buffers for use in bots, APIs,\n// Discord embeds, Telegram, emails, and non-SVG contexts.\n//\n// Works in:\n// - Node.js (via sharp or canvas fallback)\n// - Browser (via OffscreenCanvas or <canvas>)\n// - Edge functions (via resvg-wasm)\n// ═══════════════════════════════════════════════════════════════\n\nimport { renderSolFaceSVG, type RenderOptions } from \"./renderer\";\n\nexport interface PNGOptions extends RenderOptions {\n /** Output pixel size (both width and height). Default: 256 */\n pngSize?: number;\n /** PNG quality (0-1, only affects some renderers). Default: 1 */\n quality?: number;\n}\n\n// ─── Node.js Rasterization ───────────────────────────────────\n\n/**\n * Render a SolFace as a PNG Buffer using `sharp`.\n * Requires: `npm install sharp`\n *\n * @returns PNG buffer\n *\n * @example\n * ```ts\n * import { renderSolFacePNG } from \"solfaces/core/rasterize\";\n *\n * const png = await renderSolFacePNG(\"7xKXq...\", { pngSize: 256 });\n * fs.writeFileSync(\"avatar.png\", png);\n * ```\n */\nexport async function renderSolFacePNG(\n walletAddress: string,\n options?: PNGOptions\n): Promise<Buffer> {\n const { pngSize = 256, ...renderOpts } = options ?? {};\n\n // Generate SVG at the target resolution\n const svg = renderSolFaceSVG(walletAddress, {\n ...renderOpts,\n size: pngSize,\n });\n const svgBuffer = Buffer.from(svg);\n\n // Try sharp first (best quality, most common in Node)\n try {\n const sharp = await import(\"sharp\");\n return await sharp\n .default(svgBuffer)\n .resize(pngSize, pngSize)\n .png()\n .toBuffer();\n } catch {\n // sharp not installed — fall through\n }\n\n // Try @resvg/resvg-js (good for edge/serverless)\n try {\n const { Resvg } = await import(\"@resvg/resvg-js\");\n const resvg = new Resvg(svg, {\n fitTo: { mode: \"width\", value: pngSize },\n });\n const pngData = resvg.render();\n return Buffer.from(pngData.asPng());\n } catch {\n // resvg not installed\n }\n\n throw new Error(\n \"[SolFaces] PNG rasterization requires either `sharp` or `@resvg/resvg-js`. \" +\n \"Install one: npm install sharp OR npm install @resvg/resvg-js\"\n );\n}\n\n// ─── Browser Rasterization ───────────────────────────────────\n\n/**\n * Render a SolFace as a PNG Blob in the browser.\n * Uses Canvas API — works in all modern browsers.\n *\n * @returns PNG Blob\n *\n * @example\n * ```ts\n * const blob = await renderSolFacePNGBrowser(\"7xKXq...\", { pngSize: 256 });\n * const url = URL.createObjectURL(blob);\n * img.src = url;\n * ```\n */\nexport async function renderSolFacePNGBrowser(\n walletAddress: string,\n options?: PNGOptions\n): Promise<Blob> {\n const { pngSize = 256, ...renderOpts } = options ?? {};\n\n const svg = renderSolFaceSVG(walletAddress, {\n ...renderOpts,\n size: pngSize,\n });\n\n // Create image from SVG data URI\n const svgBlob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(svgBlob);\n\n return new Promise<Blob>((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n // Use OffscreenCanvas if available (better perf)\n let canvas: HTMLCanvasElement | OffscreenCanvas;\n let ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null;\n\n if (typeof OffscreenCanvas !== \"undefined\") {\n canvas = new OffscreenCanvas(pngSize, pngSize);\n ctx = canvas.getContext(\"2d\");\n } else {\n canvas = document.createElement(\"canvas\");\n canvas.width = pngSize;\n canvas.height = pngSize;\n ctx = canvas.getContext(\"2d\");\n }\n\n if (!ctx) {\n URL.revokeObjectURL(url);\n reject(new Error(\"[SolFaces] Could not get canvas context\"));\n return;\n }\n\n ctx.drawImage(img, 0, 0, pngSize, pngSize);\n URL.revokeObjectURL(url);\n\n if (canvas instanceof OffscreenCanvas) {\n canvas.convertToBlob({ type: \"image/png\" }).then(resolve).catch(reject);\n } else {\n canvas.toBlob((blob) => {\n if (blob) resolve(blob);\n else reject(new Error(\"[SolFaces] Canvas toBlob failed\"));\n }, \"image/png\");\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error(\"[SolFaces] Failed to load SVG into image\"));\n };\n\n img.src = url;\n });\n}\n\n/**\n * Render a SolFace as a PNG data URL in the browser.\n * Convenient for directly setting img.src without blob URLs.\n */\nexport async function renderSolFacePNGDataURL(\n walletAddress: string,\n options?: PNGOptions\n): Promise<string> {\n const { pngSize = 256, ...renderOpts } = options ?? {};\n\n const svg = renderSolFaceSVG(walletAddress, {\n ...renderOpts,\n size: pngSize,\n });\n\n const svgBlob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(svgBlob);\n\n return new Promise<string>((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = pngSize;\n canvas.height = pngSize;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n reject(new Error(\"[SolFaces] No canvas context\"));\n return;\n }\n ctx.drawImage(img, 0, 0, pngSize, pngSize);\n URL.revokeObjectURL(url);\n resolve(canvas.toDataURL(\"image/png\"));\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error(\"[SolFaces] SVG load failed\"));\n };\n img.src = url;\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/core/rasterize.ts"],"names":["renderSolFaceSVG"],"mappings":"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","file":"chunk-WIXGHS77.cjs","sourcesContent":["// ═══════════════════════════════════════════════════════════════\n// SOLFACES — PNG Rasterizer\n// Converts SolFace SVGs to PNG buffers for use in bots, APIs,\n// Discord embeds, Telegram, emails, and non-SVG contexts.\n//\n// Works in:\n// - Node.js (via sharp or canvas fallback)\n// - Browser (via OffscreenCanvas or <canvas>)\n// - Edge functions (via resvg-wasm)\n// ═══════════════════════════════════════════════════════════════\n\nimport { renderSolFaceSVG, type RenderOptions } from \"./renderer\";\n\nexport interface PNGOptions extends RenderOptions {\n /** Output pixel size (both width and height). Default: 256 */\n pngSize?: number;\n /** PNG quality (0-1, only affects some renderers). Default: 1 */\n quality?: number;\n}\n\n// ─── Node.js Rasterization ───────────────────────────────────\n\n/**\n * Render a SolFace as a PNG Buffer using `sharp`.\n * Requires: `npm install sharp`\n *\n * @returns PNG buffer\n *\n * @example\n * ```ts\n * import { renderSolFacePNG } from \"solfaces/core/rasterize\";\n *\n * const png = await renderSolFacePNG(\"7xKXq...\", { pngSize: 256 });\n * fs.writeFileSync(\"avatar.png\", png);\n * ```\n */\nexport async function renderSolFacePNG(\n walletAddress: string,\n options?: PNGOptions\n): Promise<Buffer> {\n const { pngSize = 256, ...renderOpts } = options ?? {};\n\n // Generate SVG at the target resolution\n const svg = renderSolFaceSVG(walletAddress, {\n ...renderOpts,\n size: pngSize,\n });\n const svgBuffer = Buffer.from(svg);\n\n // Try sharp first (best quality, most common in Node)\n try {\n const sharp = await import(\"sharp\");\n return await sharp\n .default(svgBuffer)\n .resize(pngSize, pngSize)\n .png()\n .toBuffer();\n } catch {\n // sharp not installed — fall through\n }\n\n // Try @resvg/resvg-js (good for edge/serverless)\n try {\n const { Resvg } = await import(\"@resvg/resvg-js\");\n const resvg = new Resvg(svg, {\n fitTo: { mode: \"width\", value: pngSize },\n });\n const pngData = resvg.render();\n return Buffer.from(pngData.asPng());\n } catch {\n // resvg not installed\n }\n\n throw new Error(\n \"[SolFaces] PNG rasterization requires either `sharp` or `@resvg/resvg-js`. \" +\n \"Install one: npm install sharp OR npm install @resvg/resvg-js\"\n );\n}\n\n// ─── Browser Rasterization ───────────────────────────────────\n\n/**\n * Render a SolFace as a PNG Blob in the browser.\n * Uses Canvas API — works in all modern browsers.\n *\n * @returns PNG Blob\n *\n * @example\n * ```ts\n * const blob = await renderSolFacePNGBrowser(\"7xKXq...\", { pngSize: 256 });\n * const url = URL.createObjectURL(blob);\n * img.src = url;\n * ```\n */\nexport async function renderSolFacePNGBrowser(\n walletAddress: string,\n options?: PNGOptions\n): Promise<Blob> {\n const { pngSize = 256, ...renderOpts } = options ?? {};\n\n const svg = renderSolFaceSVG(walletAddress, {\n ...renderOpts,\n size: pngSize,\n });\n\n // Create image from SVG data URI\n const svgBlob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(svgBlob);\n\n return new Promise<Blob>((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n // Use OffscreenCanvas if available (better perf)\n let canvas: HTMLCanvasElement | OffscreenCanvas;\n let ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D | null;\n\n if (typeof OffscreenCanvas !== \"undefined\") {\n canvas = new OffscreenCanvas(pngSize, pngSize);\n ctx = canvas.getContext(\"2d\");\n } else {\n canvas = document.createElement(\"canvas\");\n canvas.width = pngSize;\n canvas.height = pngSize;\n ctx = canvas.getContext(\"2d\");\n }\n\n if (!ctx) {\n URL.revokeObjectURL(url);\n reject(new Error(\"[SolFaces] Could not get canvas context\"));\n return;\n }\n\n ctx.drawImage(img, 0, 0, pngSize, pngSize);\n URL.revokeObjectURL(url);\n\n if (canvas instanceof OffscreenCanvas) {\n canvas.convertToBlob({ type: \"image/png\" }).then(resolve).catch(reject);\n } else {\n canvas.toBlob((blob) => {\n if (blob) resolve(blob);\n else reject(new Error(\"[SolFaces] Canvas toBlob failed\"));\n }, \"image/png\");\n }\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error(\"[SolFaces] Failed to load SVG into image\"));\n };\n\n img.src = url;\n });\n}\n\n/**\n * Render a SolFace as a PNG data URL in the browser.\n * Convenient for directly setting img.src without blob URLs.\n */\nexport async function renderSolFacePNGDataURL(\n walletAddress: string,\n options?: PNGOptions\n): Promise<string> {\n const { pngSize = 256, ...renderOpts } = options ?? {};\n\n const svg = renderSolFaceSVG(walletAddress, {\n ...renderOpts,\n size: pngSize,\n });\n\n const svgBlob = new Blob([svg], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(svgBlob);\n\n return new Promise<string>((resolve, reject) => {\n const img = new Image();\n img.onload = () => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = pngSize;\n canvas.height = pngSize;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n reject(new Error(\"[SolFaces] No canvas context\"));\n return;\n }\n ctx.drawImage(img, 0, 0, pngSize, pngSize);\n URL.revokeObjectURL(url);\n resolve(canvas.toDataURL(\"image/png\"));\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error(\"[SolFaces] SVG load failed\"));\n };\n img.src = url;\n });\n}\n"]}