Grzegorz Kucmierz 5c309b0959
All checks were successful
Deploy to Production / deploy (push) Successful in 8s
npm-publish / publish (push) Successful in 7s
1.0.2
2026-03-03 22:48:37 +00:00
2026-03-03 22:48:37 +00:00
2026-03-03 22:48:37 +00:00

@gkucmierz/bitcoin-logo

NPM Version License

A premium, customizable, and interactive 3D-style Bitcoin logo component for Vue 3.

Live Demo: https://bitcoin-logo.7u.pl/

🚀 Features

  • 3 Rotation Modes: Auto-rotate, Interactive (drag & throw), and Controlled.
  • Physics-based Inertia: Smooth deceleration in interactive mode.
  • Fully Customizable: Adjust size, colors, stroke, animation speed, and more.
  • Lightweight: Built with Vue 3 and SVG, no heavy 3D libraries.
  • Responsive: Centers perfectly in any container.

📦 Installation

npm install @gkucmierz/bitcoin-logo

🛠 Usage

Import the component and its styles.

<script setup>
import BitcoinLogo from '@gkucmierz/bitcoin-logo'
import '@gkucmierz/bitcoin-logo/style.css' // Import CSS!
</script>

<template>
  <BitcoinLogo
    mode="interactive"
    :size="250"
    symbolColor="#f7931a"
  />
</template>

📖 API

Props

Prop Type Default Description
mode String 'interactive' Operation mode: 'auto', 'interactive', or 'controlled'.
size Number 200 Size of the logo in pixels.
symbolColor String '#fff' Color of the Bitcoin symbol (B) and stroke.
strokeWidth Number 5 Thickness of the outer stroke.
duration Number 4 (Auto mode) Duration of one full rotation in seconds.
easing String 'linear' (Auto mode) CSS easing function (e.g. 'ease-in-out').
friction Number 0.98 (Interactive mode) Inertia friction factor (0.0 - 1.0).
rotation Number 0 (Controlled mode) The rotation angle in degrees. Can be used with v-model:rotation.

Modes

1. interactive (Default)

The user can drag the logo to rotate it. Releasing it with velocity triggers inertia.

  • Emits update:rotation event with the current angle.
  • friction prop controls how fast it stops spinning.

2. auto

The logo rotates continuously using CSS animations.

  • duration controls speed.
  • easing controls animation curve.
  • Note: Does not emit rotation events.
  • Easing Options: linear, ease, ease-in, ease-out, ease-in-out.

3. controlled

The rotation is strictly determined by the rotation prop.

  • Use this to link rotation to scroll position, mouse movement elsewhere, or other external state.

Events

Event Payload Description
update:rotation Number Emitted when rotation changes in 'interactive' mode.

💡 Examples

Interactive Mode (with v-model)

<script setup>
import { ref } from 'vue'
import BitcoinLogo from '@gkucmierz/bitcoin-logo'

const currentRotation = ref(0)
</script>

<template>
  <BitcoinLogo
    mode="interactive"
    v-model:rotation="currentRotation"
  />
  <p>Current Angle: {{ currentRotation.toFixed(0) }}°</p>
</template>

Auto Mode

<template>
  <BitcoinLogo
    mode="auto"
    :duration="2"
    easing="ease-in-out"
  />
</template>

Controlled Mode

<script setup>
import { ref } from 'vue'
import BitcoinLogo from '@gkucmierz/bitcoin-logo'

const angle = ref(0)
</script>

<template>
  <input type="range" v-model.number="angle" min="0" max="360" />
  <BitcoinLogo
    mode="controlled"
    :rotation="angle"
  />
</template>

📄 License

MIT

Description
No description provided
Readme MIT 608 KiB
Languages
Vue 76.9%
CSS 8.4%
JavaScript 6.6%
HTML 6.1%
Dockerfile 2%