{"_id":"@be-enlighten/beni-avatar","_rev":"3-7a4444830b3cb90e3ecc735d3c4b1220","name":"@be-enlighten/beni-avatar","dist-tags":{"latest":"0.4.2"},"versions":{"0.4.0":{"name":"@be-enlighten/beni-avatar","version":"0.4.0","keywords":["vue","vue3","avatar","mascot","animation","gsap","beni"],"license":"MIT","_id":"@be-enlighten/beni-avatar@0.4.0","maintainers":[{"name":"hardeath950","email":"raaaaul@live.com"}],"homepage":"https://github.com/Enlighten-Brasil/en-sdk#readme","bugs":{"url":"https://github.com/Enlighten-Brasil/en-sdk/issues"},"dist":{"shasum":"ffe69ae95f8c48cc035b734378d6cc481e1dbb10","tarball":"https://registry.npmjs.org/@be-enlighten/beni-avatar/-/beni-avatar-0.4.0.tgz","fileCount":11,"integrity":"sha512-vq2oKTgeKNN0QrK093MSxYNblazGafYz59jYXkO3pDo5W6a+RLpWRtMLFB9eEX7bLJIuXH67dAX3cyg9fp/o/g==","signatures":[{"sig":"MEQCIH2ly1xgCHqAJaU1hHxSmbxTIkIW/QiqdzInYQmAnzKcAiAVjSaVBKFB6k2Q5ON6K1AxffpC03OrtSTuYRPA4Q8Hmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315244},"type":"module","_from":"file:be-enlighten-beni-avatar-0.4.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"scripts":{"build":"pnpm build:css && vue-tsc --noEmit && tsdown && pnpm build:css","build:css":"node scripts/copy-css.mjs","typecheck":"vue-tsc --noEmit"},"_npmUser":{"name":"hardeath950","email":"raaaaul@live.com"},"_resolved":"C:\\Users\\Raul\\AppData\\Local\\Temp\\40a0368ba8d46d95d8cdfd285d5405a5\\be-enlighten-beni-avatar-0.4.0.tgz","_integrity":"sha512-vq2oKTgeKNN0QrK093MSxYNblazGafYz59jYXkO3pDo5W6a+RLpWRtMLFB9eEX7bLJIuXH67dAX3cyg9fp/o/g==","repository":{"url":"git+https://github.com/Enlighten-Brasil/en-sdk.git","type":"git","directory":"packages/beni-avatar"},"_npmVersion":"11.9.0","description":"Avatar Vue 3 animado (mascote Beni) — squircle que olha pra você, pisca, pula e comemora. Estados, humores e acessórios, animações a 60fps com GSAP.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.0","dependencies":{"gsap":"^3.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.41","tsdown":"^0.22.3","publint":"^0.3.0","vue-tsc":"^3.3.9","typescript":"^6.0.3","unplugin-vue":"^7.2.0"},"peerDependencies":{"vue":"^3.5"},"_npmOperationalInternal":{"tmp":"tmp/beni-avatar_0.4.0_1786721990338_0.20496830743670902","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@be-enlighten/beni-avatar","version":"0.4.1","keywords":["vue","vue3","avatar","mascot","animation","gsap","beni"],"license":"MIT","_id":"@be-enlighten/beni-avatar@0.4.1","maintainers":[{"name":"hardeath950","email":"raaaaul@live.com"}],"homepage":"https://github.com/Enlighten-Brasil/en-sdk#readme","bugs":{"url":"https://github.com/Enlighten-Brasil/en-sdk/issues"},"dist":{"shasum":"094c5c68b33d15698421e30f31cb44e6b968d405","tarball":"https://registry.npmjs.org/@be-enlighten/beni-avatar/-/beni-avatar-0.4.1.tgz","fileCount":11,"integrity":"sha512-8NFU/SHb+GnEbuu/++ZpOKd/kbXVvTT7bNz7iZKHJY2q4UU0Tk0IzKY116BSbawBXMfx1TjDGpyItCsJegDVMg==","signatures":[{"sig":"MEUCIQC3KfNuFi4cJpTQx3tYhL7Q3V2kFlMPJoQrGKxA7Jtq2gIgTnTM5fiorArr7/qw13SJPJMy8N93q2pCulEsweE+GB0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316122},"type":"module","_from":"file:be-enlighten-beni-avatar-0.4.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"scripts":{"build":"pnpm build:css && vue-tsc --noEmit && tsdown && pnpm build:css","build:css":"node scripts/copy-css.mjs","typecheck":"vue-tsc --noEmit"},"_npmUser":{"name":"hardeath950","email":"raaaaul@live.com"},"_resolved":"C:\\Users\\Raul\\AppData\\Local\\Temp\\7eefeb7b83ca648a67de9676039b43fa\\be-enlighten-beni-avatar-0.4.1.tgz","_integrity":"sha512-8NFU/SHb+GnEbuu/++ZpOKd/kbXVvTT7bNz7iZKHJY2q4UU0Tk0IzKY116BSbawBXMfx1TjDGpyItCsJegDVMg==","repository":{"url":"git+https://github.com/Enlighten-Brasil/en-sdk.git","type":"git","directory":"packages/beni-avatar"},"_npmVersion":"11.9.0","description":"Avatar Vue 3 animado (mascote Beni) — squircle que olha pra você, pisca, pula e comemora. Estados, humores e acessórios, animações a 60fps com GSAP.","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.14.0","dependencies":{"gsap":"^3.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.41","tsdown":"^0.22.3","publint":"^0.3.0","vue-tsc":"^3.3.9","typescript":"^6.0.3","unplugin-vue":"^7.2.0"},"peerDependencies":{"vue":"^3.5"},"_npmOperationalInternal":{"tmp":"tmp/beni-avatar_0.4.1_1787257306911_0.09510860788296904","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"_id":"@be-enlighten/beni-avatar@0.4.2","bugs":{"url":"https://github.com/Enlighten-Brasil/en-sdk/issues"},"dist":{"shasum":"800c5f3a1204e9c2826dbd599d5199d4b61b9fcc","tarball":"https://registry.npmjs.org/@be-enlighten/beni-avatar/-/beni-avatar-0.4.2.tgz","fileCount":13,"integrity":"sha512-GzbUL2QtaI9YUFYeLtlTegGE9m55wcmP9HBd22+ssIKlnnIKVM74oiU1tVHOFO8Ptoh7GN4XKLWrz14/eThyUA==","signatures":[{"sig":"MEQCIEsvONNX8A8W/CUpzQ74mrukmwbqwsT4d6zjC2qXaEJAAiBE8e0k55gvhxVz7fqcD543z6w9ZenC1STIcyigW5zVtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIElnZVaWxC4dxzpWNmSChLJMIDlaQoRshsywBinq73aLAiEApb0v+jqh9InF8f0cjXI8/b1C2Jsytqj86IksmCUawzw="}],"unpackedSize":331025},"name":"@be-enlighten/beni-avatar","type":"module","_from":"file:be-enlighten-beni-avatar-0.4.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css","./package.json":"./package.json"},"license":"MIT","scripts":{"build":"pnpm build:css && vue-tsc --noEmit && tsdown && pnpm build:css","build:css":"node scripts/copy-css.mjs","typecheck":"vue-tsc --noEmit"},"version":"0.4.2","_npmUser":{"name":"hardeath950","email":"raaaaul@live.com"},"homepage":"https://github.com/Enlighten-Brasil/en-sdk#readme","keywords":["vue","vue3","avatar","mascot","animation","gsap","beni"],"_resolved":"C:\\Users\\Raul\\AppData\\Local\\Temp\\8ce372728af78e04f30f0e56cbf84268\\be-enlighten-beni-avatar-0.4.2.tgz","_integrity":"sha512-GzbUL2QtaI9YUFYeLtlTegGE9m55wcmP9HBd22+ssIKlnnIKVM74oiU1tVHOFO8Ptoh7GN4XKLWrz14/eThyUA==","repository":{"url":"git+https://github.com/Enlighten-Brasil/en-sdk.git","type":"git","directory":"packages/beni-avatar"},"_npmVersion":"11.9.0","description":"Avatar Vue 3 animado (mascote Beni) — squircle que olha pra você, pisca, pula e comemora. Estados, humores e acessórios, animações a 60fps com GSAP.","directories":{},"maintainers":[{"name":"hardeath950","email":"raaaaul@live.com"}],"sideEffects":["**/*.css"],"_nodeVersion":"24.14.0","dependencies":{"gsap":"^3.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.42","tsdown":"^0.22.14","publint":"^0.3.24","vue-tsc":"^3.3.11","typescript":"^6.0.3","unplugin-vue":"^7.2.0"},"peerDependencies":{"vue":"^3.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/beni-avatar_0.4.2_1789150607351_0.428715485629237"}}},"time":{"created":"2026-08-14T15:39:50.182Z","modified":"2026-09-11T18:16:47.628Z","0.4.0":"2026-08-14T15:39:50.487Z","0.4.1":"2026-08-20T20:21:47.071Z","0.4.2":"2026-09-11T18:16:47.442Z"},"bugs":{"url":"https://github.com/Enlighten-Brasil/en-sdk/issues"},"license":"MIT","homepage":"https://github.com/Enlighten-Brasil/en-sdk#readme","keywords":["vue","vue3","avatar","mascot","animation","gsap","beni"],"repository":{"url":"git+https://github.com/Enlighten-Brasil/en-sdk.git","type":"git","directory":"packages/beni-avatar"},"description":"Avatar Vue 3 animado (mascote Beni) — squircle que olha pra você, pisca, pula e comemora. Estados, humores e acessórios, animações a 60fps com GSAP.","maintainers":[{"name":"hardeath950","email":"raaaaul@live.com"}],"readme":"# @be-enlighten/beni-avatar\n\nAvatar Vue 3 animado, pequeno e simpático. Um squircle que olha pra você, pisca, pula e comemora. Solte-o em qualquer app Vue pra dar personalidade a estados de carregamento, páginas vazias, fluxos de onboarding, ou só por diversão.\n\n- 🎭 **8 estados**: `idle`, `working`, `error`, `speaking`, `loading`, `sleep`, `branding`, `celebrate`\n- 💬 **4 humores**: `happy`, `sad`, `angry`, `surprised` (sobrepostos a qualquer estado)\n- 🎩 **6 acessórios de cabeça**: beanie, coroa, capacete, chapéu de festa, gorro de papai noel, gorro stan\n- 🖱️ **Olhos que seguem o mouse**, opcional\n- 🎉 **Easter eggs por clique**: duplo, triplo, quíntuplo\n- 🎨 **Tema via props**: cores do corpo e dos olhos controladas pelo componente pai\n- ⚡ **~14 KB gzipped**, sem dependências de runtime além de `gsap` e `vue`\n\nAnimações a 60fps com [GSAP](https://gsap.com).\n\n## Demo\n\nA playground em [`examples/beni-avatar`](../../examples/beni-avatar) é um estúdio interativo: à esquerda, os 8 estados como cards clicáveis; no centro, o Beni grande controlado pela seleção; à direita, os 4 humores. Logo abaixo, um painel de configuração com acessório, tema (5 presets), toggle \"seguir mouse\" e slider de intervalo de piscada. Os cards reagem ao tema e ao acessório ativos, com borda gradiente destacada no item selecionado. É também a página hospedada na Vercel.\n\n## Instalação\n\n```bash\npnpm add @be-enlighten/beni-avatar gsap\n# ou\nnpm install @be-enlighten/beni-avatar gsap\n# ou\nyarn add @be-enlighten/beni-avatar gsap\n```\n\n> **Peer dependency**: `vue` ≥ 3.5. O `gsap` (≥ 3.15) é dependency do pacote — instalado automaticamente; declare-o também no app se quiser pinar a mesma cópia.\n\n## Início rápido\n\nO avatar é distribuído como um SFC Vue acompanhado de um arquivo CSS. Importe o stylesheet **uma vez** no app, em `main.ts`, para que as variáveis CSS dos acessórios fiquem disponíveis:\n\n```ts\n// main.ts\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport '@be-enlighten/beni-avatar/style.css'\n\ncreateApp(App).mount('#app')\n```\n\n```vue\n<!-- App.vue -->\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { Beni, type BeniState, type MoodName } from '@be-enlighten/beni-avatar'\n\nconst state = ref<BeniState>('idle')\nconst mood = ref<MoodName | null>(null)\n</script>\n\n<template>\n  <Beni\n    v-model:state=\"state\"\n    v-model:mood=\"mood\"\n  />\n</template>\n```\n\nPronto. Você tem um squircle de ~160×160 que pisca, respira e segue o cursor.\n\n## Props\n\n| Prop | Tipo | Padrão | Descrição |\n| --- | --- | --- | --- |\n| `state`* | `BeniState` | `'idle'` | Estado atual. Bind via `v-model:state`. |\n| `mood`* | `MoodName \\| null` | `null` | Humor sobreposto. Bind via `v-model:mood`. |\n| `headItem` | `HeadItemKey \\| null` | `null` | Acessório: `'beanie'`, `'crown'`, `'helmet'`, `'partyhat'`, `'santahat'`, `'stanhat'`. |\n| `bodyBaseColor` | `string` | `'#60a5fa'` | Cor inicial do gradiente do corpo. |\n| `bodyBaseColorTo` | `string` | `'#2563eb'` | Cor final do gradiente do corpo. |\n| `bodyBaseModel` | `BodyModelName` | `'squircle'` | Forma base, antes de overrides de estado. |\n| `bodyScale` | `number` | `1` | Escala geral do corpo. |\n| `bodyOffsetX` | `number` | `0` | Deslocamento horizontal, em unidades SVG. |\n| `bodyOffsetY` | `number` | `0` | Deslocamento vertical, em unidades SVG. |\n| `eyeBaseColor` | `string` | `'#00f0ff'` | Cor padrão dos olhos (estados podem sobrescrever). |\n| `eyeBaseBlinkInterval` | `number` | `4000` | Intervalo médio entre piscadas, em ms. `0` desativa. |\n| `eyeGap` | `number` | `2` | Distância entre os olhos. |\n| `eyeOffsetX` | `number` | `0` | Deslocamento horizontal dos olhos. |\n| `eyeOffsetY` | `number` | `2` | Deslocamento vertical dos olhos. |\n| `eyeLookAtMouse` | `boolean` | `true` | Olhos seguem o cursor. |\n| `eyeLookAtTarget` | `{ x, y } \\| null` | `null` | Fixa os olhos em um ponto (sobrepõe o mouse). |\n| `eyeLookDuration` | `number` | `0.15` | Duração do tween de movimento, em segundos. |\n| `eyeLookEase` | `string` | `'power2.out'` | Ease do GSAP. |\n| `eyeLookOvershoot` | `number` | `0.6` | Overshoot quando os olhos se acomodam no alvo. |\n| `bodyFollowMouse` | `boolean` | `true` | Quando os olhos atingem as bordas, a cabeça vira levemente na direção do cursor. |\n| `bodyFollowMaxRotation` | `number` | `4` | Rotação máxima da cabeça, em graus. |\n| `bodyFollowDeadzone` | `number` | `5` | Limiar (em unidades do offset dos olhos) abaixo do qual a cabeça relaxa. |\n| `bodyFollowDuration` | `number` | `0.45` | Duração do tween de rotação da cabeça, em segundos. Mais lento que os olhos cria o efeito de \"pescoço acompanha\". |\n| `clickRipple` | `boolean` | `true` | Mostra uma onda no clique. |\n| `clickRippleColor` | `string \\| null` | `null` | Cor da onda. Usa a cor atual do corpo por padrão. |\n| `clickRippleDuration` | `number` | `0.4` | Duração da onda, em segundos. |\n\n\\* bind bidirecional via `v-model`.\n\n### Eventos\n\n| Evento | Payload | Quando |\n| --- | --- | --- |\n| `update:state` | `BeniState` | O estado muda (via `v-model`). |\n| `update:mood` | `MoodName \\| null` | O humor muda. |\n| `click` | `BeniClickPayload` | O avatar é clicado. |\n| `interaction` | `BeniInteractionPayload` | Uma interação interna de clique dispara. |\n\n## Estados\n\n| Estado | Visual | Melhor uso |\n| --- | --- | --- |\n| `idle` | Balanço suave, olhos passeando | Padrão. |\n| `working` | Corpo girando, olhos frenéticos | Carregamento/processamento. |\n| `error` | Corpo vermelho, tremor com glitch | Estados de erro. |\n| `speaking` | Cabeça balançando, sílabas na boca | Assistentes de IA. |\n| `loading` | Quadrado arredondado girando | Loaders. |\n| `sleep` | Respiração lenta, olhos fechados, \"Z\"s | Ocioso / segundo plano. |\n| `branding` | Magenta→índigo, olhos \"EN\" | Splash / marketing. |\n| `celebrate` | Pulando, explosão de confete | Sucesso. |\n\n```vue\n<Beni :state=\"currentState\" />\n```\n\n```ts\nconst currentState = ref<BeniState>('working')\n\nwatch(someTask, (task) => {\n  currentState.value = task.status === 'loading' ? 'working' : 'celebrate'\n})\n```\n\n## Humores\n\nOs humores se sobrepõem a um estado. Mudam olhos, boca e geram pequenos elementos SVG (lágrima, veia de raiva).\n\n| Humor | Efeito |\n| --- | --- |\n| `happy` | Olhos arqueados, sorriso largo. |\n| `sad` | Olhos fechados, tom azulado, lágrima. |\n| `angry` | Olhos arqueados pra baixo, tom vermelho, veia. |\n| `surprised` | Olhos circulares, sem boca. |\n\n```vue\n<Beni v-model:state=\"state\" v-model:mood=\"mood\" />\n```\n\nVocê pode derivar o humor a partir do estado. O avatar já dispara `happy` no clique duplo em `idle` (veja \"Interações internas\").\n\n## Acessórios de cabeça\n\nSeis itens prontos. Cada um acompanha o pulo/escala/rotação do corpo, mas se mantém firme em cima da cabeça — não inclina com a inclinação do corpo, na prática parecia instável demais.\n\n```vue\n<Beni :head-item=\"accessory\" />\n```\n\n```ts\nimport { type HeadItemKey, headItemNames, headItemLabels } from '@be-enlighten/beni-avatar'\nimport { ref } from 'vue'\n\nconst accessory = ref<HeadItemKey | null>('crown')\n```\n\nEm `working`, `loading` e `error` o acessório é escondido automaticamente. Esses estados giram tanto o corpo que o chapéu voaria.\n\n> **Tematizando os acessórios**: as cores vêm de variáveis CSS. Sobrescreva-as no seu stylesheet:\n>\n> ```css\n> :root {\n>   --beni-items-head-crown: #ffd700;\n>   --beni-items-head-crown-shade: #b8860b;\n>   --beni-items-head-beanie: #8b5cf6;\n>   /* ... */\n> }\n> ```\n>\n> Importe `@be-enlighten/beni-avatar/style.css` antes e sobrescreva as variáveis depois.\n\n## Interações internas por clique\n\nClique rápido pra disparar easter eggs. Já vêm de fábrica, sem flag.\n\n| Padrão | Estado inicial | Dispara |\n| --- | --- | --- |\n| Clique duplo | `idle` | Humor `happy` por 2,2s |\n| 5 cliques | `idle` | Estado `branding` por 3s |\n| Clique duplo | `sleep` | Piscada de volta por 1,5s |\n| 3 cliques | `sleep` | Acorda (persistente) |\n\nCada interação é anunciada pelo evento `interaction`.\n\n## Eventos de clique\n\n```vue\n<Beni @click=\"onClick\" @interaction=\"onInteraction\" />\n```\n\n```ts\nimport type { BeniClickPayload, BeniInteractionPayload } from '@be-enlighten/beni-avatar'\n\nfunction onClick(p: BeniClickPayload) {\n  console.log(p.target)       // 'body' | 'eye-left' | 'eye-right'\n  console.log(p.clickIndex)   // 1 no primeiro clique, 2 no segundo dentro de 800ms, ...\n  console.log(p.state)        // estado atual\n  console.log(p.mood)         // humor atual (ou null)\n}\n\nfunction onInteraction(p: BeniInteractionPayload) {\n  console.log(p.id)              // ex.: 'happy-on-double-click'\n  console.log(p.label)           // legível por humanos\n  console.log(p.triggerClickCount)\n}\n```\n\n## Tematizando o avatar\n\n```vue\n<script setup lang=\"ts\">\nconst theme = {\n  body: '#f59e0b',\n  bodyTo: '#ef4444',\n  eye: '#fef3c7',\n}\n</script>\n\n<template>\n  <Beni\n    :body-base-color=\"theme.body\"\n    :body-base-color-to=\"theme.bodyTo\"\n    :eye-base-color=\"theme.eye\"\n  />\n</template>\n```\n\nPara um seletor de temas completo, use `computed`:\n\n```ts\nimport { computed } from 'vue'\nimport type { BeniState, MoodName } from '@be-enlighten/beni-avatar'\n\nconst theme = computed(() => themes[currentTheme.value])\nconst state = ref<BeniState>('idle')\nconst mood = ref<MoodName | null>(null)\n```\n\nO avatar é totalmente reativo: cada mudança de prop entra com tween (sem piscar), e estados/humores fazem crossfade suave.\n\n## Exemplo: estado de carregamento de um assistente de IA\n\n```vue\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport { Beni, type BeniState, type MoodName } from '@be-enlighten/beni-avatar'\n\nconst status = ref<'idle' | 'thinking' | 'done'>('idle')\nconst state = ref<BeniState>('idle')\nconst mood = ref<MoodName | null>(null)\n\nwatch(status, (s) => {\n  if (s === 'thinking') {\n    state.value = 'working'\n    mood.value = null\n  } else if (s === 'done') {\n    state.value = 'celebrate'\n    mood.value = 'happy'\n  } else {\n    state.value = 'idle'\n    mood.value = null\n  }\n})\n</script>\n\n<template>\n  <div class=\"assistant\">\n    <Beni\n      v-model:state=\"state\"\n      v-model:mood=\"mood\"\n      :head-item=\"status === 'done' ? 'partyhat' : null\"\n      body-base-color=\"#fbbf24\"\n      body-base-color-to=\"#ec4899\"\n      eye-base-color=\"#fef3c7\"\n    />\n    <p v-if=\"status === 'thinking'\">Pensando…</p>\n    <p v-else-if=\"status === 'done'\">Pronto!</p>\n  </div>\n</template>\n```\n\n## TypeScript\n\nPacote totalmente tipado. Exports mais úteis:\n\n```ts\nimport type {\n  BeniState,\n  MoodName,\n  HeadItemKey,\n  BodyModelName,\n  EyeModelName,\n  BeniClickPayload,\n  BeniInteractionPayload,\n} from '@be-enlighten/beni-avatar'\n\n// Constantes\nimport {\n  beniStateNames, // ['idle', 'working', ...]\n  beniMoods,\n  headItemNames,\n  headItemLabels,\n} from '@be-enlighten/beni-avatar'\n```\n\n## Suporte a navegadores\n\nQualquer navegador com suporte a CSS moderno (`custom properties`, `filter`) e SVG, ou seja, todos os navegadores evergreen. O GSAP exige `requestAnimationFrame`, que é universal.\n\nO pacote respeita `prefers-reduced-motion: reduce`: as animações pausam no frame final quando o usuário tem essa preferência ativa.\n\n## Desenvolvimento\n\nEste pacote vive no monorepo [`en-sdk`](https://github.com/Enlighten-Brasil/en-sdk) (`packages/beni-avatar`). A demo/playground fica em [`examples/beni-avatar`](../../examples/beni-avatar) e consome o `dist/` deste pacote via workspace — rode o `build` antes (e após cada mudança no `src/`).\n\n```bash\npnpm install\npnpm --filter @be-enlighten/beni-avatar build             # gera dist/ (pacote)\npnpm --filter @be-enlighten/beni-avatar typecheck         # só type-check\npnpm --filter @be-enlighten/enspace-sdk-example-beni dev  # playground em http://localhost:5173\n```\n\n### Publicando\n\nVersão própria — este pacote **não** entra no lockstep dos 4 packages `enspace-sdk-*`. O versionamento é gerenciado por [changesets](https://github.com/changesets/changesets) (`.changeset/` no root do monorepo): adicione um changeset com `pnpm changeset` a cada mudança user-facing e publique pelo fluxo unificado do monorepo:\n\n```bash\npnpm version-packages   # bumpa versão + gera CHANGELOG a partir dos changesets\npnpm release            # valida, builda e publica o que estiver pendente\n```\n\nDetalhes na seção **Publicação** do `AGENTS.md` do monorepo. Sobe no [npm público](https://www.npmjs.com/package/@be-enlighten/beni-avatar) (`access: public`). Precisa de login npm local (`npm login`) com acesso ao escopo `@be-enlighten`.\n\n## Licença\n\nMIT.","readmeFilename":"README.md"}