@inputkit/core
v0.2.0
Published
Framework-agnostic utilities for formatted inputs: card type detection, Luhn validation, formatters, and validators.
Maintainers
Readme
@inputkit/core
Framework-agnostic utilities for formatted inputs. Card type detection, Luhn validation, formatters, and validators — no React, no DOM.
Usage
import {
formatCardNumber,
detectCardType,
validateCardNumber,
validateLuhn,
formatExpiry,
stripNonDigits,
} from "@inputkit/core";
// Format a card number with auto-detected gaps
formatCardNumber("4111111111111111");
// => "4111 1111 1111 1111"
// Amex gets 4-6-5 grouping automatically
formatCardNumber("378282246310005");
// => "3782 822463 10005"
// Detect the brand from a partial number
const type = detectCardType("37");
// => { brand: "amex", displayName: "American Express", ... }
// Validate with Luhn, length, and type checks
validateCardNumber("4111111111111111");
// => undefined (valid)
validateCardNumber("4111111111111112");
// => "Card number is invalid"
// Format an expiry date
formatExpiry("1225", { prevValue: "", action: "insert" });
// => "12 / 25"
// Use Luhn directly
validateLuhn("4111111111111111");
// => trueCustom card types
import { createCardTypeRegistry } from "@inputkit/core";
const registry = createCardTypeRegistry([
{
brand: "store-card",
displayName: "My Store Card",
startPattern: /^999/,
lengths: [16],
gaps: [4, 8, 12],
code: { name: "PIN", length: 4 },
},
]);
registry.detect("9991234567890123");
// => { brand: "store-card", ... }