Alaznah

Built-in Alaznah Calling screens and primitives.

UI components

ComponentRole
CallingScreenDialer + incoming + active
CallingUIIncoming + active (bring your own dialer)
IncomingCallScreenStandalone incoming layout (swipe-up accept)
ActiveCallScreenStandalone in-call layout
CallControlsMute / speaker / camera / end
AudioWaveOptional voice visualization
VideoView / LocalVideoView / RemoteVideoViewRender streams
mergeTheme / defaultCallingThemeTheming helpers

Paths

Ship quickly

tsx
<CallingProvider config={config}>
  <CallingScreen userId={user.id} />
</CallingProvider>

Your navigation + Alaznah call UI

tsx
function CallsTab() {
  const client = useCallingClient();
  const incoming = useIncomingCall();
  const call = useCall();

  if (incoming || call) {
    return <CallingUI client={client} />;
  }
  return <MyContactsList onCall={(id) => client.startCall({ calleeId: id })} />;
}

Fully custom

Use Hooks + video views + your buttons. Still call drainNativeIncomingAction / syncPendingCalls on resume — Incoming Calls.

Incoming behavior

Default IncomingCallScreen:

  • Decline = tap red
  • Accept = swipe up green (tap ignored)
  • Animated chevrons hint the gesture
  • Video invites may offer join-with-video toggle + local preview

Theming

tsx
<CallingUI
  theme={{
    colors: {
      accent: '#111111',
      background: '#0b1220',
    },
  }}
/>

Theme keys are defined on CallingTheme in package types. See Customization.

Import paths

ts
import { CallingScreen, CallingUI, LocalVideoView } from '@alaznah/calling';
import { IncomingCallScreen, ActiveCallScreen, CallControls } from '@alaznah/calling/ui';