PHPackages                             centrex/tallui - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. centrex/tallui

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

centrex/tallui
==============

This is my package tallui

v1.2.4(yesterday)01.1k3MITPHPPHP ^8.3CI passing

Since Apr 6Pushed 4w agoCompare

[ Source](https://github.com/centrex/tallui)[ Packagist](https://packagist.org/packages/centrex/tallui)[ Docs](https://github.com/centrex/tallui)[ RSS](/packages/centrex-tallui/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (45)Versions (43)Used By (3)

TallUI — Laravel UI Components Library
======================================

[](#tallui--laravel-ui-components-library)

[![Latest Version on Packagist](https://camo.githubusercontent.com/12fab34200c48c82a11267e126b716fd16799b153f48620555459d7f9fbff769/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f63656e747265782f74616c6c75692e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/centrex/tallui)[![GitHub Tests Action Status](https://camo.githubusercontent.com/ead14ab8c10af0a8e5f63ed6f1882f7659c5e8dce0a975ba0de304f9f330e2ca/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f63656e747265782f74616c6c75692f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/centrex/tallui/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/01c5e6f7f5917c8f41b7b69f8b7b681981ebd41b61b78d107d77bdfa8d36c8ea/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f63656e747265782f74616c6c75692f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/centrex/tallui/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/1ccd130297182548f60e114229890cfa3eb7dfb02488a1bf034ba25f3c55a5a7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f63656e747265782f74616c6c75693f7374796c653d666c61742d737175617265)](https://packagist.org/packages/centrex/tallui)

Reusable Blade and Livewire UI components built on **DaisyUI + Alpine.js**. Includes layout helpers, interactive components, a full-featured DataTable with search/sort/export, and ApexCharts-powered chart components.

Contents
--------

[](#contents)

- [Installation](#installation)
- [Configuration](#configuration)
- [Blade Components](#blade-components)
    - [Layout — Header, Page Header, Card, Stats](#layout)
    - [Navigation — Sidebar, Breadcrumb, Menu, Tabs](#navigation)
    - [Overlays — Modal, Dialog, Drawer](#overlays)
    - [Feedback — Alert, Badge, Notification, Empty State, Loading, Progress](#feedback)
    - [Buttons &amp; Icons](#buttons--icons)
    - [Display — Accordion, Collapse, Carousel, Image Gallery, Image Library, Timeline, Steps, Avatar, Rating, Swap, Tags](#display)
    - [Form Components](#form-components)
- [Livewire DataTable](#livewire-datatable)
- [Charts](#charts)
- [Performance Blade Directives](#performance-blade-directives)
- [Testing](#testing)

---

Installation
------------

[](#installation)

```
composer require centrex/tallui
php artisan vendor:publish --tag="tallui-config"
```

**Requires:** `livewire/livewire ^3`, `blade-ui-kit/blade-heroicons` (for icons).

---

Configuration
-------------

[](#configuration)

```
// config/tallui.php
'prefix' => 'tallui',   // '' → , 'tallui' →
```

Run `php artisan view:clear` after changing the prefix.

---

Blade Components
----------------

[](#blade-components)

All components pass through `$attributes`, so HTML attributes and DaisyUI/Tailwind classes merge cleanly.

---

### Layout

[](#layout)

#### Header

[](#header)

Sticky application navbar. Integrates with `` via `sidebar-id`.

```

        Dashboard
        Reports

```

PropDefaultDescription`brand``null`Brand name text`brand-href``/`Brand link URL`brand-logo``null`Logo image URL`sticky``true`Stick to top of viewport`shadow``true`Show bottom shadow`height``h-16`Tailwind height class`sidebar-id``''`Dispatches `toggle-sidebar` event when hamburger clickedNamed slots: `brandSlot`, `center`, `actions`.

---

#### Sidebar

[](#sidebar)

Slide-in navigation panel. Toggleable via Alpine events or the Header's hamburger button.

```
{{-- Layout wrapper --}}

            Dashboard
            Users

    ...

{{-- Open/close from anywhere --}}
Menu
```

PropDefaultDescription`id``sidebar`Unique ID; used in Alpine events`position``left``left` or `right``width``w-64`Tailwind width class`overlay``true`Dark backdrop behind sidebar`persistent``false`Always visible on `collapse-breakpoint`+ screens`collapse-breakpoint``lg`Breakpoint where sidebar becomes always-visible`header``null`Header text (use `headerSlot` for custom content)Named slots: `headerSlot`, `footerSlot`.

---

#### Page Header

[](#page-header)

```

```

---

#### Card

[](#card)

```

    ৳ 1,24,000

        Updated just now

```

`padding`: `none | compact | normal | loose`.

---

#### Stats

[](#stats)

```

```

`change-type`: `up | down | neutral`.

---

### Navigation

[](#navigation)

#### Breadcrumb

[](#breadcrumb)

```

```

#### Menu

[](#menu)

Link item:

```

```

Livewire link without navigate:

```

```

Button action:

```

```

Section title:

```

```

```

        @csrf

```

#### Tabs

[](#tabs)

```

```

---

### Overlays

[](#overlays)

#### Modal

[](#modal)

Full-featured modal with backdrop, keyboard close, and named slots.

```

    Are you sure you want to delete this user? This action cannot be undone.

        Cancel
        Yes, delete

```

Open/close from anywhere: `$dispatch('open-modal', 'confirm-delete')`.

PropDefaultOptions`id``modal`Unique ID`size``md``sm | md | lg | xl | full``closeable``true`Show × button + backdrop click to close---

#### Dialog

[](#dialog)

Lightweight centred confirmation dialog. Auto-selects icon and colour per `type`.

```

    This action is permanent and cannot be reversed.

        Cancel
        Delete

```

Open programmatically: `$dispatch('open-dialog', 'delete-confirm')`.

`type`IconColour`info`information-circletext-info`success`check-circletext-success`warning`exclamation-triangletext-warning`error`x-circletext-error`confirm`question-mark-circletext-primary---

#### Drawer

[](#drawer)

```

    {{-- Drawer body --}}

```

---

### Feedback

[](#feedback)

#### Alerts

[](#alerts)

```

    Your subscription expires in 3 days.

```

Types: `info | success | warning | error`. Icon auto-selected per type.

#### Badges

[](#badges)

```
Active
Pending
Draft
```

Types/colors: `success | error | warning | info | primary | secondary | accent | ghost | outline | neutral`. Sizes: `xs | sm | md | lg`.

#### Notifications

[](#notifications)

Place once in your layout. Reads session flash keys and listens for Livewire events:

```
{{-- layout.blade.php --}}

```

```
// In any Livewire component
$this->dispatch('notify', type: 'success', message: 'Saved!');
$this->dispatch('notify', type: 'error',   message: 'Something went wrong.');
```

Session keys auto-displayed: `success`, `error`, `warning`, `info`, `message`. Positions: `top-right | top-left | bottom-right | bottom-left | top-center`.

#### Empty State

[](#empty-state)

```

```

Sizes: `sm | md | lg`.

#### Loading &amp; Progress

[](#loading--progress)

```

```

---

### Buttons &amp; Icons

[](#buttons--icons)

```
{{-- Link with wire:navigate --}}

{{-- Loading spinner tied to wire:click --}}

{{-- Responsive: hides label on mobile --}}

{{-- Tooltip --}}

{{-- Heroicon --}}

```

---

### Display

[](#display)

#### Accordion

[](#accordion)

```

    TallUI is a Laravel UI component library built on DaisyUI and Alpine.js.

```

Variants: `arrow | plus`.

---

#### Collapse

[](#collapse)

Single collapsible panel with smooth Alpine.js transitions. Lighter than Accordion for standalone use.

```

```

PropDefaultDescription`title``''`Header text`open``false`Expanded by default`bordered``false`Border instead of filled background`variant``arrow``arrow | plus | none`---

#### Image Gallery

[](#image-gallery)

Read-only image grid with built-in lightbox:

```

```

---

#### Image Library

[](#image-library)

Selectable image picker with lightbox and form submission support. Double-click opens lightbox; single-click selects.

```

```

PropDefaultDescription`images``[]`Array of `['src', 'alt'?, 'caption'?, 'id'?]``multiple``false`Allow multiple selections`selected``[]`Pre-selected ids/srcs`name``null`If set, renders hidden inputs for form posting`selectable``true`Enable selection UI`columns``4`Grid column count (sm: 2, sm+: columns)---

#### Other Display Components

[](#other-display-components)

```
{{-- Carousel --}}

{{-- Timeline --}}

{{-- Steps --}}

{{-- Rating --}}

{{-- Avatar --}}

{{-- Tags --}}

{{-- Swap (toggle icon) --}}

{{-- Theme Toggle --}}

{{-- Popover --}}

{{-- Spotlight search --}}

```

---

### Form Components

[](#form-components)

#### Standard Inputs

[](#standard-inputs)

```

```

---

#### Select

[](#select)

`` supports three common modes:

1. Standard select with automatically sorted labels
2. Searchable select with client-side filtering for static options
3. Async searchable select backed by a model registry or custom endpoint

```
{{-- Standard select: options are sorted by label by default --}}

{{-- Local searchable select for static options --}}

{{-- Async searchable select using the TallUI search registry --}}

```

If `searchable` is enabled without `search-name` or `search-url`, the component filters the provided options in the browser. If `searchable` is combined with `search-name` or `search-url`, it performs async lookups instead.

You can also enqueue a source definition directly on the component. TallUI stores that definition temporarily in cache and the async endpoint reads it back using a signed token-style lookup key.

```

```

PropDefaultDescription`options``[]`Flat associative array or `[{value, label, sublabel?}]` list`searchable``false`Enables search mode`search-name``null`Registry key for the built-in async search route`search-url``null`Fully custom async search endpoint`search-source``[]`Inline async source definition stored temporarily in cache`sort``true`Sort static options by label`placeholder``null`Placeholder/empty option label`required``false`Marks the field as required`disabled``false`Disables the field#### Async Select Configuration

[](#async-select-configuration)

Register searchable models in `config/tallui.php`:

```
'searchable_models' => [
    'customer' => [
        'model' => App\Models\Customer::class,
        'label' => 'name',
        'sublabel' => 'email',
        'value' => 'id',
        'search_columns' => ['name', 'email', 'phone'],
        'order_by' => 'name',
        'order_direction' => 'asc',
        'limit' => 25,
    ],
],
```

`search_source_ttl` controls how long inline `search-source` definitions stay available in cache.

```

```

Config KeyDescription`model`Eloquent model class used for lookups`label`Column used for the displayed text`sublabel`Optional secondary column shown below the main label`value`Column returned as the selected value`search_columns`Columns searched by the async endpoint`order_by`Default ordering column`order_direction``asc` or `desc``limit`Maximum results returned per query---

#### Range Slider

[](#range-slider)

```

```

---

#### Rich Text Editor

[](#rich-text-editor)

Content-editable rich text editor with formatting toolbar (bold, italic, underline, lists, headings). Output stored in a hidden `` for form submission.

```

```

---

#### Choices (Multi-Select)

[](#choices-multi-select)

Searchable multi-select with tag badges. Outputs hidden inputs for form submission.

```

```

Options can also be a list of `['value' => '...', 'label' => '...']` arrays.

PropDefaultDescription`options``[]`Flat associative array or `[{value, label}]` list`selected``[]`Pre-selected values`multiple``true`Allow multiple selections`searchable``true`Show search input in dropdown---

#### File Upload (Drag &amp; Drop)

[](#file-upload-drag--drop)

Drag-and-drop zone with client-side file size validation and image preview thumbnails.

```

```

PropDefaultDescription`multiple``false`Accept multiple files`accept``null`MIME/extension filter (e.g. `image/*,.pdf`)`max-size-mb``10`Client-side size limit per file`preview``true`Show image thumbnails and file cards below zoneFor Livewire uploads, pass `wire:model` directly to the component; it is forwarded to the underlying file input.

---

#### File Input (Simple)

[](#file-input-simple)

```

```

---

#### PIN / OTP Input

[](#pin--otp-input)

Auto-advancing digit inputs with paste support, backspace navigation, and masked mode.

```

```

PropDefaultDescription`length``6`Number of digit inputs`masked``false``password`-type inputs (dots)`numeric``true`Only allow digits; set `false` for alphanumeric OTPs`size``md``sm | md | lg`Behaviour: typing auto-advances to the next cell, Backspace moves back, paste distributes across all cells, a visual separator is inserted at the midpoint for 6+ digit codes.

---

Livewire DataTable
------------------

[](#livewire-datatable)

Extend `DataTable`, override `columns()` and `query()`:

```
use Centrex\TallUi\DataTable\Column;
use Centrex\TallUi\Livewire\DataTable;
use Illuminate\Database\Eloquent\Builder;

class CustomerTable extends DataTable
{
    public string $defaultSortBy = 'name';

    public function columns(): array
    {
        return [
            Column::make('Name', 'name')->searchable()->sortable(),
            Column::make('Email', 'email')->searchable(),
            Column::make('Balance', 'outstanding_balance')->sortable(),
            Column::make('Status', 'status')->badge('neutral', ['active' => 'success', 'inactive' => 'error']),
            Column::make('Actions')->actions([...]),
        ];
    }

    public function query(): Builder
    {
        return Customer::query();
    }
}
```

```

```

Features: URL-synced search/sort/page (`#[Url]`), sortable-column allowlisting, default sort support, per-page selector with normalization, row selection, CSV export (chunked + UTF-8 BOM), optional result caching via `$cacheTtl`, and relation-aware search for searchable columns such as `customer.name`.

#### DataTable Notes

[](#datatable-notes)

- Only columns marked with `->sortable()` can be used for sorting.
- Set `$defaultSortBy` and `$defaultSortDirection` to define the initial ordering.
- Searchable relation columns such as `customer.name` are supported in the global search.
- Invalid `perPage` values fall back to the first configured per-page option.
- `Filter::select()` and `Filter::boolean()` apply real query constraints instead of acting as UI-only filters.

### Responsive DataTable

[](#responsive-datatable)

Automatically switches between a desktop table and a mobile card stack at the `md` breakpoint. Change the breakpoint by overriding `$mobileBreakpoint`:

```
class CustomerTable extends DataTable
{
    public string $mobileBreakpoint = 'lg';   // cards below 1024 px
    // public string $mobileBreakpoint = '';  // disable card stack
}
```

Hide columns at smaller widths:

```
Column::make('Name',   'name')->searchable()->sortable(),   // always visible
Column::make('Email',  'email')->hideOnMobile(),             // hidden below md
Column::make('Phone',  'phone')->visibleFrom('lg'),          // hidden below lg
Column::make('Tax ID', 'tax_id')->visibleFrom('xl'),         // hidden below xl
```

---

Charts
------

[](#charts)

All charts are Livewire components powered by [ApexCharts](https://apexcharts.com) (loaded via CDN, configurable in `config/tallui.php`).

### Standard Charts

[](#standard-charts)

```

```

Common props (all charts): `title`, `subtitle`, `height` (px, default 350), `theme` (`light|dark`), `poll` (ms, 0 = disabled), `data-provider` (FQCN of `ChartDataProvider`).

---

### Mixed (Combo) Chart

[](#mixed-combo-chart)

Combines bar, line, and area series in one canvas. Each series must include a `type` key.

```

```

```
$series = [
    ['name' => 'Revenue',  'type' => 'bar',  'data' => [50000, 70000, 80000, 60000]],
    ['name' => 'Trend',    'type' => 'line', 'data' => [55000, 65000, 75000, 70000]],
    ['name' => 'Forecast', 'type' => 'area', 'data' => [48000, 68000, 78000, 72000]],
];
$months = ['Jan', 'Feb', 'Mar', 'Apr'];
```

---

### Treemap Chart

[](#treemap-chart)

Hierarchical tile visualisation. Series uses `{x, y}` data pairs; multiple series = multiple colour groups.

```

```

```
$series = [
    [
        'name' => 'Electronics',
        'data' => [
            ['x' => 'Phones',   'y' => 90],
            ['x' => 'Laptops',  'y' => 75],
            ['x' => 'Tablets',  'y' => 40],
        ],
    ],
    [
        'name' => 'Clothing',
        'data' => [
            ['x' => 'Shirts',   'y' => 55],
            ['x' => 'Shoes',    'y' => 38],
        ],
    ],
];
```

Props: `:distributed="true"` (each tile its own colour), `:enable-shades="true"`.

---

### Radial Bar Chart

[](#radial-bar-chart)

Gauge-style circular arcs. Each arc represents one percentage value. Shows averaged total in the centre.

```

```

PropDefaultDescription`series``[]`Flat array of percentages (0–100)`categories``[]`Arc labels, one per value`start-angle``-135`Start angle in degrees`end-angle``135`End angle in degrees`hollow``true`Donut-style hollow centre`track``''`Custom track background colour---

### Radar Chart

[](#radar-chart)

Spider/web chart for multi-dimensional comparison. Supports multiple series on the same grid.

```

```

```
$series = [
    ['name' => 'Model A', 'data' => [80, 50, 30, 40, 100, 20]],
    ['name' => 'Model B', 'data' => [60, 85, 70, 55,  75, 60]],
];
```

---

### Polar Area Chart

[](#polar-area-chart)

Proportional sectors that also extend outward by value — like a pie chart with a size dimension. Series is a flat array; categories are the sector labels.

```

```

---

### Range Area Chart

[](#range-area-chart)

Shaded band between a low and a high value per x-point. Ideal for confidence intervals, temperature ranges, and min/max visualisations.

```

```

```
$series = [
    [
        'name' => 'Temperature',
        'data' => [
            ['x' => 'Jan', 'y' => [2,  12]],
            ['x' => 'Feb', 'y' => [3,  15]],
            ['x' => 'Mar', 'y' => [8,  22]],
            ['x' => 'Apr', 'y' => [13, 28]],
        ],
    ],
];
```

Props: `:smooth="true"` — smooth or straight stroke.

---

### Data Providers

[](#data-providers)

For charts fed from a service or cache, implement `ChartDataProvider`:

```
use Centrex\TallUi\Contracts\ChartDataProvider;

class RevenueDataProvider implements ChartDataProvider
{
    public function getData(): array
    {
        return [
            'series'     => [['name' => 'Revenue', 'data' => [50, 70, 80]]],
            'categories' => ['Jan', 'Feb', 'Mar'],
        ];
    }
}
```

```

```

---

Performance Blade Directives
----------------------------

[](#performance-blade-directives)

Registered automatically by the service provider.

### `@pushonce` / `@endpushonce`

[](#pushonce--endpushonce)

Push a block to a named stack **exactly once** per request — prevents duplicate `` or `` tags when a component renders multiple times on one page.

```
@pushonce('scripts', 'my-lib')

@endpushonce
```

The second argument is the deduplication key. Omit it to use the stack name as the key.

---

### `@memoize` / `@endmemoize`

[](#memoize--endmemoize)

Render a Blade block **once per request**, then replay the cached HTML on every subsequent call. Use inside loops for expensive sub-views (icon sets, nav links, etc.).

```
@foreach($rows as $row)
    @memoize('shared-icon-set')

    @endmemoize
@endforeach
```

The block is rendered on the first encounter; all subsequent calls output the same cached string instantly.

---

### `@lazy` / `@endlazy`

[](#lazy--endlazy)

Defer Alpine.js initialisation until the wrapped content **scrolls near the viewport** (uses Alpine `x-intersect`). Reduces the JS work on initial page load for below-the-fold components.

```
@lazy

@endlazy
```

Requires Alpine's `x-intersect` plugin (bundled with Livewire 3 / Alpine 3.x).

---

### `@styleonce` / `@endstyleonce`

[](#styleonce--endstyleonce)

Push a `` block to the `styles` stack at most once, regardless of how many times the component renders.

```
@styleonce('pin-input')

        .pin-cell { letter-spacing: 0.5em; }

@endstyleonce
```

---

### `@scriptonce` / `@endscriptonce`

[](#scriptonce--endscriptonce)

Push a `` block to the `scripts` stack at most once.

```
@scriptonce('my-init')

        window.myLib = { version: '1.0' };

@endscriptonce
```

---

Testing
-------

[](#testing)

```
composer test        # full suite: rector dry-run, pint check, phpstan, pest
composer test:unit   # pest tests only
composer test:types  # phpstan static analysis
composer lint        # apply pint formatting
```

---

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Credits
-------

[](#credits)

- [centrex](https://github.com/centrex)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE) for more information.

###  Health Score

51

—

FairBetter than 95% of packages

Maintenance97

Actively maintained with recent releases

Popularity20

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 81.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Recently: every ~14 days

Total

38

Last Release

1d ago

Major Versions

v0.7.3 → v1.0.02026-04-25

PHP version history (2 changes)v0.1.0PHP ^8.2

v0.7.1PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/29769944?v=4)[Raisul Islam](/maintainers/rochi88)[@rochi88](https://github.com/rochi88)

---

Top Contributors

[![rochi88](https://avatars.githubusercontent.com/u/29769944?v=4)](https://github.com/rochi88 "rochi88 (85 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (12 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (7 commits)")

---

Tags

laravelcentrextallui

###  Code Quality

TestsPest

Static AnalysisPHPStan, Rector

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/centrex-tallui/health.svg)

```
[![Health](https://phpackages.com/badges/centrex-tallui/health.svg)](https://phpackages.com/packages/centrex-tallui)
```

###  Alternatives

[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M201](/packages/laravel-ai)[livewire/flux

The official UI component library for Livewire.

9527.8M128](/packages/livewire-flux)[laravel/boost

Laravel Boost accelerates AI-assisted development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.

3.5k21.5M601](/packages/laravel-boost)[nativephp/mobile

NativePHP for Mobile

1.1k75.1k96](/packages/nativephp-mobile)[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[renatomarinho/laravel-page-speed

Laravel Page Speed

2.5k1.7M10](/packages/renatomarinho-laravel-page-speed)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
