A beautiful, interactive payment card component for React applications.
- π¨ Beautiful, realistic card design
- π Interactive animations and transitions
- π³ Support for major card types (Visa, Mastercard, Amex, etc.)
- π Multi-language support (English, Portuguese, Turkish)
- π± Responsive design
- π Card number masking/unmasking
- β Built-in validation
- π Customizable backgrounds
- π¦ TypeScript support
- π Zero dependencies (except React)
pnpm add @muhammedaksam/interactive-card
# or
npm install @muhammedaksam/interactive-card
# or
yarn add @muhammedaksam/interactive-cardImportant: Don't forget to import the CSS styles for the component to work properly!
import React from 'react';
import { InteractivePayCard } from '@muhammedaksam/interactive-card';
import '@muhammedaksam/interactive-card/dist/style.css';
function App() {
const handleSubmit = (cardData) => {
console.log('Card data:', cardData);
};
return (
<InteractivePayCard
onSubmit={handleSubmit}
locale="en"
/>
);
}import React from 'react';
import { InteractivePayCard } from '@muhammedaksam/interactive-card';
import '@muhammedaksam/interactive-card/dist/style.css';
function App() {
const handleSubmit = (cardData) => {
// Handle form submission
console.log('Card data:', cardData);
};
return (
<InteractivePayCard
onSubmit={handleSubmit}
locale="en"
randomBackgrounds={false}
backgroundImage="https://your-custom-background.jpg"
initialData={{
cardName: 'John Doe',
cardNumber: '4111 1111 1111 1111'
}}
className="my-custom-class"
/>
);
}import React, { useState } from 'react';
import { PayCard } from '@muhammedaksam/interactive-card';
import '@muhammedaksam/interactive-card/dist/style.css';
function CustomForm() {
const [cardData, setCardData] = useState({
cardName: '',
cardNumber: '',
cardMonth: '',
cardYear: '',
cardCvv: ''
});
const fields = {
cardNumber: 'card-number',
cardName: 'card-name',
cardMonth: 'card-month',
cardYear: 'card-year',
cardCvv: 'card-cvv'
};
return (
<PayCard
labels={cardData}
fields={fields}
isCardNumberMasked={false}
locale="en"
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
onSubmit |
(data: CardFormData) => void |
- | Callback function when form is submitted |
initialData |
Partial<CardFormData> |
{} |
Initial form data |
locale |
'en' | 'pt' | 'tr' |
'en' |
Language for labels and messages |
randomBackgrounds |
boolean |
true |
Enable random background images |
backgroundImage |
string |
- | Custom background image URL |
className |
string |
'' |
Additional CSS class |
| Prop | Type | Default | Description |
|---|---|---|---|
labels |
CardFormData |
- | Card data to display |
fields |
object |
- | Field ID mapping |
isCardNumberMasked |
boolean |
- | Whether to mask card number |
randomBackgrounds |
boolean |
true |
Enable random backgrounds |
backgroundImage |
string |
- | Custom background image |
focusedField |
string | null |
- | Currently focused field |
isCardFlipped |
boolean |
false |
Whether card is flipped to show CVV |
locale |
'en' | 'pt' | 'tr' |
'en' |
Display language |
interface CardFormData {
cardName: string;
cardNumber: string;
cardMonth: string;
cardYear: string;
cardCvv: string;
}- Visa
- Mastercard
- American Express
- Discover
- JCB
- Diners Club
- UnionPay
- Troy
# Clone the repository
git clone https://github.com/muhammedaksam/interactive-card.git
cd interactive-card
# Install dependencies
pnpm install
# Start development server
pnpm run dev
# Start Storybook for component development
pnpm run storybook
# Build for production
pnpm run build
# Build library
pnpm run build:libThe library can be built in two modes:
- Development:
pnpm run build- Creates a demo application - Library:
pnpm run build:lib- Creates the npm package - Storybook:
pnpm run storybook- Starts Storybook for component development and testing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT Β© Muhammed Mustafa AKΕAM
Inspired by the original Vue.js component by muhammed.
