Maskable Entry plugin screenshot
Dark mode ready
Multilingual support
Supports v5.x

Maskable Entry

A reusable maskable entry component for Filament Infolists to hide and toggle sensitive values.

Tags: Infolist Entry
Supported versions:
4.x
Anish Regmi avatar Author: Anish Regmi

Documentation

maskable-entry

A reusable maskable entry component for Filament Infolists.

A powerful Filament PHP infolist component that enables seamless maskable entry. Ideal for hiding and toggling sensitive values such as passwords, social security numbers, credit card numbers, and API keys.


#Features

  • 🔒 Maskable Display — Hide sensitive data with custom mask patterns
  • 👁️ Toggle Visibility — One click to reveal or hide the actual value
  • 🎨 Native Filament v4 & v5 Integration — Works like any infolist entry
  • ⚙️ Fully Configurable — Custom patterns, masking characters, closures
  • 📱 Responsive — Works across all device sizes

#Requirements

  • PHP 8.1+
  • Laravel 10+
  • Filament 4.x or 5.x

#Installation

composer require anish/maskable-entry

The package auto-discovers its service provider—no manual setup required.


#Basic Usage

use Anish\MaskableEntry\Components\MaskableEntry;
use Illuminate\Support\Facades\Auth;
use Filament\Schemas\Schema;

public static function configure(Schema $schema): Schema
{
    return $schema->components([
        MaskableEntry::make('social_security_number')
            ->maskValue('XXX-XX-XXXX')
            ->actualValue(fn ($record) => $record->social_security_number)
            ->toggleable(Auth::user()->can('view_social_security_number'))
            ->label('Social Security Number'),
    ]);
}

#Note:

If you are using a custom theme add the plugin's views to your theme css file or your app's css file.

@source '../../../../vendor/anish/maskable-entry/resources/views/**/*.blade.php

#Advanced Usage

#Custom Mask Pattern

MaskableEntry::make('credit_card')
    ->maskValue('XXXX-XXXX-XXXX-XXXX')
    ->actualValue(fn ($record) => $record->credit_card_number)
    ->label('Credit Card Number');

#Using a Closure for Actual Value

MaskableEntry::make('password')
    ->maskValue('XXXXXXXX')
    ->actualValue(fn (User $record) => $record->password)
    ->label('Password');

#Available Methods

#maskValue(string $value)

The pattern shown in masked mode. Use X (or your custom char) to represent masked digits.

->maskValue('XXX-XX-XXXX')

#actualValue(string|Closure|null $value)

Defines the value revealed on toggle.

->actualValue(fn ($record) => $record->social_security_number)
// or
->actualValue('123-45-6789')

#Supports All Standard TextEntry Methods

MaskableEntry::make('field')
    ->maskValue('XXX-XX-XXXX')
    ->actualValue(fn ($record) => $record->value)
    ->label('Custom Label')
    ->placeholder('N/A')
    ->copyable()
    ->icon('heroicon-o-shield-check');

#How It Works

  1. Masked State — Displays the mask pattern (XXX-XX-XXXX)
  2. Toggle Button — Eye icon switches visibility
  3. Revealed State — Shows the actual value formatted
  4. Formatting — Automatically aligns characters to mask structure

#Testing

composer test

#Code Style

This package uses Laravel Pint:

composer format

#Contributing

Contributions are welcome!

#Development Setup

  1. Clone the repo
  2. composer install
  3. Create a new branch
  4. Write your feature
  5. Run tests & Pint
  6. Submit PR

#Security

If you find a security issue, please email: anishregminaglibang@gmail.com


#Changelog

See CHANGELOG.


#Credits


#License

MIT

The author

Anish Regmi avatar Author: Anish Regmi

I am Anish Regmi, a full-stack web developer from Nepal. I have a strong foundation in PHP, Laravel, Filament, and JavaScript, and I specialize in building modern, scalable web applications. I enjoy creating clean, maintainable code and delivering seamless user experiences across both frontend and backend development.

Plugins
3
Stars
48

From the same author