Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Pinpoint Laravel Package

fahiem/filament-pinpoint

Filament Pinpoint adds a location picker for Filament 4/5 with Google Maps or free Leaflet/OpenStreetMap. Includes search/autocomplete, click-to-set and draggable marker, current location, radius editing, reverse geocoding to fill address fields, dark mode, and translations.

View on GitHub
Deep Wiki
Context7
v1.1.9

Added

  • 🔒 Read-only mode support - Implement
    CanBeReadOnly on Pinpoint form component (#18 by @gpibarra)
    • New readOnly() method to make the map
      display-only (no drag, no click, no search)
    • New readOnlyOn() method to restrict editing on specific operations (e.g., readOnlyOn('view'))
    • Supports closures for conditional read-only:
      readOnly(fn () => !auth()->user()->can('edit'))
    • Works with both Google Maps and Leaflet providers
    • Map remains pannable and zoomable for viewing
    • Radius circle is displayed but not editable when
      read-only
    • Search box, "Use My Location" button, and helper
      text are hidden when read-only

Improved

  • 🎨 Theme-compatible CSS - Replaced all hardcoded CSS colors with Filament CSS variables (#20 by @RibesAlexandre)
    • Search input, dropdown, button, and map border now use var(--gray-*) and var(--primary-*) instead of hardcoded hex values
    • Plugin automatically adapts to custom Filament
      themes and color palettes (e.g., Slate, Zinc, custom
      primary colors)
    • Radius circle color now follows the configured
      primary theme color
    • Replaced non-compiling Tailwind utility classes with theme-aware CSS classes
    • Removed all !important overrides from dark mode styles
v1.1.8

Added

  • 🌐 Spanish (es) translation — Added Spanish localization for all UI strings (PR #17 by @daljo25)

Supported Languages

English, Arabic, Dutch, Indonesian, Spanish (new!)

v1.1.7

Fixed

  • 🌙 Dark mode dropdown unreadable on Leaflet provider - Fixed search autocomplete dropdown showing white background with invisible text in dark mode (#16 by [@daljo25](https://github.com/daljo25))
    • Replaced Tailwind utility classes with plain CSS using .dark selector, since plugin views aren't scanned by the app's Tailwind JIT compiler
    • Scoped all search component styles (.pinpoint-search-input, .pinpoint-search-dropdown, .pinpoint-search-item) under .fi-fo-pinpoint for proper specificity
    • Search input, dropdown container, dropdown items, and result text now fully adapt to dark mode
    • Applied same fix to Google Maps search input for consistency
v1.1.6

What's New

🗺️ Leaflet.js Provider — Free Alternative to Google Maps

You can now use Leaflet.js + OpenStreetMap as a completely free map provider — no API key required.

Enable globally via .env:

PINPOINT_PROVIDER=leaflet

Or per field:
Pinpoint::make('location')->provider('leaflet')
PinpointEntry::make('location')->provider('leaflet')

Features (Leaflet provider)

- 🔍 Location search via Nominatim (OpenStreetMap)
- 🏠 Full reverse geocoding — address, province, city, district, village, postal code, street, street number
- ✋ Draggable marker & resizable radius circle
- 📍 Multi-marker support for PinpointEntry with colored SVG pins & popups
- 🌓 Dark mode tile URL support (LEAFLET_TILE_URL_DARK)
- ⚙️  Configurable tile server, attribution, and Nominatim URL

✅ Fully Backward Compatible

Existing users default to provider = google — no changes required.

---
Full Changelog: https://github.com/fahiem152/filament-pinpoint/blob/main/CHANGELOG.md

---
v1.1.5

What's New

Filament v5 Support

The package now officially supports Filament v5 alongside v4. Composer constraint updated to ^4.0|^5.0.

Street & Street Number Auto-fill

New methods to auto-fill street data from Google reverse geocoding:

  • streetField('street') - Auto-fill street name
  • streetNumberField('street_number') - Auto-fill street number

Dark Theme Fix

Fixed search box styling in dark mode — improved background contrast and cleaner border styling.

v1.1.4

🎨 What's New

This release improves the radius circle feature with better
visual design and user experience.

Improvements

  • Enhanced Visual Design

    • Changed circle color from red to blue (#4285F4) for a
      friendlier, more professional appearance
    • Circle now matches Google's Material Design color palette
  • Better Z-Index Layering

    • Marker (pin) now appears above the circle with proper z-index
      stacking
    • Marker: zIndex 200 (always on top)
    • Circle: zIndex 100 (below marker)
    • No more visual confusion when marker overlaps with circle edge
  • Improved Interactivity

    • Added clickable: true to circle for better user interaction
    • Smoother drag-to-resize experience
    • Better visual feedback during drag operations
  • Enhanced Documentation

    • Updated README with clearer radius usage instructions
    • Added visual hierarchy explanation
    • Improved code examples

How to Use Radius Feature

Pinpoint::make('location')                                          
    ->latField('lat')                                               
    ->lngField('lng')                                               
    ->radiusField('radius')  // Enable radius circle                
    ->defaultRadius(500)     // Default 500 meters            

Features:

  • Resize radius by dragging the white handle on circle's edge
  • Radius value automatically saves to your database field in
    real-time
  • Completely optional - just omit radiusField() if you don't need it
v1.1.3

v1.1.3 - 2026-01-06

Added

  • Multi-pin support for PinpointEntry - Display multiple markers on a single map in infolist view
    • New pins() method to set array of multiple markers with coordinates
    • Each pin supports optional label for marker title
    • Each pin supports optional color (8 predefined colors: red, blue, green, yellow, purple, pink, orange, ltblue)
    • Each pin supports optional icon for custom marker icon URL
    • Each pin supports optional info for custom HTML info window content
    • Info windows appear on marker click
  • 🎯 Auto-fit bounds - Map automatically zooms to show all markers
    • New fitBounds() method to enable/disable auto-fit behavior
    • When enabled, map viewport adjusts to display all pins
    • Single pin displays at default zoom level
  • 📍 "Use my location" button - New GPS location button for Pinpoint form field
    • Uses browser's Geolocation API to get current device location
    • Auto-fills coordinates and reverse geocodes address
    • Clean grayscale design that works with any theme
    • Smooth hover and active states
    • Full dark mode support

Fixed

  • 🐛 Fixed "Use my location" button positioning issues in form field
    • Button no longer appears outside form container
    • Proper RTL (Right-to-Left) layout support
    • Consistent styling across different themes

Changed

  • 🎨 Improved map container overflow handling with overflow: clip for stricter clipping
  • 🔄 Refactored PinpointEntry to support both single marker and multiple markers
  • 💅 Enhanced button styling with better accessibility (focus states, active states)
v1.1.2

What's Changed

Fixed

  • 🔧 Environment variables now properly override default map settings (#5)
  • 🔄 Repeater field compatibility (#6)

Changed

  • Updated README with Repeater usage example
  • Added GOOGLE_MAPS_DEFAULT_HEIGHT env support

Full Changelog: https://github.com/fahiem152/filament-pinpoint/blob/main/CHANGELOG.md

v1.1.1

What's New

Added

  • 🌐 Multi-language support (EN, AR, NL, ID)
  • shortAddressField() - Auto-fill short address
  • countryField() - Auto-fill country name
  • PinpointEntry component for Infolists

Fixed

  • Translation strings now use proper Laravel package namespace

Contributors

v1.1.0

What's New in v1.1.0

New Features

  • Address Component Fields - New methods to auto-fill address components from Google Maps reverse geocoding:
    • provinceField() - Province/State (administrative_area_level_1)
    • cityField() - City/County (administrative_area_level_2)
    • districtField() - District (administrative_area_level_3)
    • postalCodeField() - Postal/ZIP code

Bug Fixes

  • Null Handling - Address fields now always update when location changes. Fields are set to null when Google Maps API returns no data, preventing stale data from persisting.
  • Search Input Border - Fixed border visibility in both light and dark modes.

UI Improvements

  • Improved search input styling with visible border
  • Relocated current location button for better UX

Usage Example

Pinpoint::make('location')
    ->latField('lat')
    ->lngField('lng')
    ->addressField('address')
    ->provinceField('province')
    ->cityField('city')
    ->districtField('district')
    ->postalCodeField('postal_code');

Contributors

v1.0.3

Fixed

  • 🐛 Map blank saat edit - peta sekarang muncul dengan benar saat edit record
  • 🐛 Address tidak tampil di search box - alamat dari database sekarang ditampilkan di search input saat edit
  • 🐛 Lat/Lng tidak tersimpan - koordinat dari database (string) sekarang dikonversi ke float dengan benar

Changed

  • Tambah addressField ke state hydration untuk load address dari database saat edit
  • Tambah parseFloat() untuk konversi lat/lng dari string ke float
  • Tambah x-model="address" pada search input untuk two-way binding
  • Update reverseGeocode() untuk sync address ke search box
v1.0.0

Features

  • 🔍 Search location using Google Places Autocomplete
  • 📍 Click on map to set marker
  • ✋ Draggable marker support
  • 📱 Get current device location
  • 🏠 Reverse geocoding to auto-fill address fields
  • ⚙️ Configurable default location, zoom, and height

Requirements

  • PHP 8.1+
  • Filament 4.0+
  • Google Maps API Key
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle