npm.io
1.0.0 • Published 3d ago

@zamanapp/basma

Licence
MIT
Version
1.0.0
Deps
0
Size
117 kB
Vulns
0
Weekly
0

basma

basma

Beautifully crafted unique avatar placeholders for Vue 3.

بَسْمَةa smile. بَصْمَةa fingerprint.

One word in Latin letters; two in Arabic. The difference is whether you read it with a sīn (س) or a ṣād (ص). An avatar is both at once: a face, and a mark no one else has.

Give it a value, get a stable avatar: two characters or one of 60 shapes, on a matched colour palette. The same value always produces the same avatar, and no network request is ever made.

Credit

Basma is a Vue port of avvvatars by Nusu Alabuga. The generation algorithm, the colour palettes, and every one of the 60 shapes are his original work — this port contributes only the Vue rendering layer. If Basma is useful to you, go star the original and visit avvvatars.com.

Licensed MIT; the upstream licence is retained in LICENSE.avvvatars.

Install

pnpm add @zamanapp/basma

Vue 3.3+ is a peer dependency.

Usage

<script setup>
import Basma from '@zamanapp/basma'
</script>

<template>
  <Basma value="ada@example.com" />
  <Basma value="ada@example.com" variant="shape" :size="64" />
</template>

Or register it globally:

import { BasmaPlugin } from '@zamanapp/basma'
app.use(BasmaPlugin)

Props

Prop Type Default Description
value string required The identity the avatar is derived from — a user id, email, or full name.
displayValue string Characters to show instead of value. Does not change the colour or shape.
size number 32 Width and height in pixels. Text and shape scale with it.
variant 'character' | 'shape' 'character' Show two characters, or a shape.
shadow boolean false Apply a subtle drop shadow.
border boolean false Draw a border.
borderSize number 2 Border width in pixels. Requires border.
borderColor string '#fff' Border colour. Requires border.
radius number size Corner radius in pixels. Defaults to a full circle.

Because value seeds the avatar and displayValue does not, you can relabel a user without changing the avatar they are recognised by.

Headless use

The generator is exported separately if you want to render the avatar yourself:

import { generate } from '@zamanapp/basma'

generate('ada@example.com')
// { initials, backgroundColor, textColor, shapeColor, shape: { d, evenOdd }, viewBox }

SHAPES, SHAPE_VIEWBOX, BACKGROUND_COLORS, TEXT_COLORS and SHAPE_COLORS are exported too.

Coming from avvvatars?

The same value gives you the same avatar you'd get from avvvatars, and every prop works the same way — with one rename to know about:

  • Use variant="shape", not style="shape". Vue treats style as a special attribute, so it can't be used as a prop name here. Everything else is identical.

Basma also ships with zero runtime dependencies, and you can drop as many avatars on a page as you like without them clashing — a nice-to-have that the original couldn't offer.

License

MIT — see LICENSE.

Keywords