npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

v-credit-card-component

v0.1.21

Published

Vue friendly credit card component, forked https://github.com/AfikDeri/v-credit-card

Downloads

8

Readme

v-credit-card

Vue friendly credit card component, forked https://github.com/AfikDeri/v-credit-card

Features:

  • Business card support
  • Order arrangement support
  • Error handling for card
  • Mini icon position configuration
  • Valid mark to let user knows input is fine
  • Slot for extra information on label <-- currently not working, open for PR and help (v-slot not working after build)
  • Customizable error message validator and messages

Installation

npm install --save v-credit-card-component

usage

Register the component as a plugin and use it globally

import Vue from 'vue';
import VCreditCard from 'v-credit-card-component';

Vue.use(VCreditCard);

// Usage
<v-credit-card />;

Styles

You must import the CSS to get all the card styles

import VCreditCard from 'v-credit-card-component';
import 'v-credit-card-component/dist/v-credit-card.css';

Available props

| props | required | options | default | explanation | | ------------------ | -------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | | direction | no | column, row, column-reverse, row-reverse | column | Card and form side-by-side or top to bottom | | className | no | any string | none | For any custom design, add your own wrapper class | | yearDigits | no | 2,4 (number) | 2 | construct the expiration year (YY or YYYY) | | noCard | no | true, false | false | Show only the form without the credit card image | | trans | no | ITranslation | default labels | Override the default labels with your own | | order | no | Order | default orders | Rearrange the input orders | | acceptBusinessCard | no | boolean | true | Will add a toggle for business name input | | cardIconConfig | no | ICardIconConfig | default config | Controlling the position of the mini card icon | | errorMessage | no | IErrorMessages | {card: '', cardName: 'Please enter only alphabet.', businessName: 'Please enter only alphabet.'} | Show the error message if process has error or card name has issues | | showValidMark | no | boolean | true | Show green indicator on the input field if the input is valid | | regex | no | IRegex | '^[A-Za-z]+$' for all elements | Regex to validate name and business name |

Events

You can listen for the @change event to get an object of all the form fields with their current values

<template>
  <v-credit-card @change="onInputChanged" />
</template>

<script>
  interface Data {
    name: string;
    businessName: string;
    cardNumber: string;
    expiration: string;
    security: string;
    isBusinessCard: boolean;
  }

  export default {
    // ...
    methods: {
      onInputChanged(values: Data) {
        console.log('Credit card fields', values);
      },
    },
  };
</script>

Enable and disable business credit card checkbox

This example will not hide the business card toggle.

<template>
  <v-credit-card :acceptBusinessCard="false" />
</template>

Reordering input fields

This example shows how to rearrange the input fields to meet your needs.

If two input fields have the same order, the order will following as below:

businessName > name > card > security > isBusinessCardCheckbox

<template>
  <v-credit-card :order="order" />
</template>

<script>
  export default {
    data() {
      return {
        // ...
        order: {
          businessName: 0, // Show on the top
          name: 1, // Show on the second
          card: 2, // Show on the third
          security: 3, // Show on the forth
          isBusinessCardCheckbox: 4, // Show on the fifth
        },
      };
    },
  };
</script>

Store the form data in your component

This example shows how to have your local data reflect the changes inside the card component.

<template>
  <v-credit-card @change="onInputChanged" />
</template>

<script>
  export default {
    data() {
      return {
        name: '',
        cardNumber: '',
        expiration: '',
        security: '',
        businessName: '',
        isBusinessCard: '',
      };
    },
    methods: {
      onInputChanged(values) {
        for (const key in values) {
          this[key] = values[key];
        }
      },
    },
  };
</script>

If you need the card type as well (Visa, Mastercard, etc) you can listen to the @cardChanged event.

<template>
  <v-credit-card @cardChanged="cardChanged" />
</template>

<script>
  export default {
    data() {
      return {
        // ...
        cardName: null,
      };
    },
    methods: {
      // ...
      cardChanged(cardName) {
        this.cardName = cardName;
      },
    },
  };
</script>

Mini card brand icon styling

We can configure the position of the icon as well as displaying of the icon. PS: the icon appears after users entered a valid card number

default: { showIcon: true, position: 'inline' }

<template>
  <v-credit-card :cardIconConfig="cardConfig" />
</template>

<script>
  export default {
    data() {
      return {
        // ...
        cardConfig: {
          showIcon: true,
          position: 'top',
        },
      };
    },
  };
</script>

Translations

If you wish to override the default field labels, you can accomplish that by passing a custom translation object.

<template>
  <v-credit-card :trans="translations" />
</template>

<script>
  const translations = {
    name: {
      label: '名前',
      placeholder: 'カードホルダー',
    },
    card: {
      label: 'クレジットカード',
      placeholder: 'クレジットカード',
    },
    expiration: {
      label: '有効期限',
    },
    businessName: {
      label: '会社名',
      placeholder: 'COREKARA INC',
    },
    security: {
      label: 'セキュリティーコード',
      placeholder: 'コード',
    },
    isBusinessCard: {
      label: 'ビジネスカードを使います',
    },
    image: {
      cardNumber: 'クレジットカード',
      cardholder: 'カードホルダー',
      expiration: '有効期限',
      valid: 'valid',
      thru: 'thru',
      security: 'セキュリティーコード',
    },
  };

  export default {
    data() {
      return {
        translations,
      };
    },
  };
</script>

Error handling when card has error

The error message will be removed if the input is dirty.

<template>
  <v-credit-card :errorMessage="errorMessage" />
</template>

<script>
  export default {
    data() {
      return {
        // ...
        errorMessage: {
          card: 'something wrong with the card',
        },
      };
    },
    methods: {
      // ...
      yourApiCall() {
        fetch('api here')
          .then()
          .catch((error) => {
            this.errorMessage.card = error;
          });
      },
    },
  };
</script>

Card name and business card name validation

Customizable validator for card name and business card name with customizable error messages. To DEACTIVATE the validator, simply define errorMessage object without cardName and businessName.

const errorMessages = {
  card: '',
};

Regex is optional field

const regex = {
  cardName: '',
  businessName: '',
};
<template>
  <v-credit-card :errorMessage="errorMessage" :regex="regex" />
</template>

<script>
  export default {
    data() {
      return {
        // ...
        errorMessage: {
          card: 'something wrong with the card', // This is a required field, at least an empty string
          cardName: 'Please only input alphabet character.',
          businessName: 'Please only input alphabet character.',
        },
        regex: {
          cardName: '^[A-Za-z]+$',
          businessName: '^[A-Za-z]+$',
        },
      };
    },
  };
</script>

Valid mark

Indicator that shows if the input field has received valid value default is true

<template>
  <v-credit-card :showValidMark="'true'" />
</template>

Slot for extra information on the input field label

Extra information can be inserted by v-slot.

| Input field | Slot Name | | -------------- | ------------------- | | businessName | businessNameLabel | | name | nameLabel | | cardNumber | cardNumberLabel | | expirationDate | expirationDateLabel | | securityCode | securityCodeLabel | | isBusinessCard | isBusinessCardLabel |

<template>
  <v-credit-card>
    <template v-slot:businessNameLabel>
      <!-- Your code here -->
    </template>
  </v-credit-card>
</template>

TYPEs

// For most translation items will have a label and a placeholder
// Except: security and isBusinessCard dont have placeholders
interface ITranslationItem {
  label: string;
  placeholder?: string;
}

interface ITranslation {
  name: ITranslationItem;
  businessName: ITranslationItem;
  card: ITranslationItem;
  expiration: ITranslationItem;
  security: ITranslationItem;
  isBusinessCard: ITranslationItem;
  image: {
    cardNumber: string,
    cardholder: string,
    expiration: string,
    valid: string,
    thru: string,
    security: string,
  };
}

// Data array that will be returned on the onChange event
interface IData {
  name: string;
  businessName: string;
  cardNumber: string;
  expiration: string;
  security: string;
  isBusinessCard: boolean;
}

// Order
interface Order {
  businessName: number;
  name: number;
  card: number;
  security: number;
  isBusinessCardCheckbox: number;
}

// Configuration for the small card brand icon in the input after valid card number is typed
interface ICardIconConfig {
  showIcon?: boolean;
  position: 'inline' | 'top';
}

// Tooltip for extra info for the supported card brands
interface ITooltipConfig {
  showTooltip: boolean;
  context: string;
}

// Error messages
interface IErrorMessages {
  card: string; // Display below card number input
  cardName?: string; // Display below card name input, rule: cardName regex
  businessName?: string; // Display below card business name input, rule: businessName regex
}

interface IRegex {
  cardName: string; // Regex for card name input
  businessName: string; // Regex for business card name input
}

License

MIT © 2022-present