Skip to content

Repository files navigation

Rapidez Blade Components

This package includes some Tailwind CSS styled Blade components, the components do not need or require Rapidez. This package is only used within Rapidez by default, but can be used in any Laravel project.

The idea with these components is to have a good starting point and centralized styling. Most of the components use a Anonymous Index, this way you have a default and variants can be added next to it. We're using the (currently undocumented) component name guessing here.

We don't provide a input + label combination component as you'll end up with attribute merging issues. We can't guess where the attribute should go; the input or the label. We could provide a 99% use case but you'll eventually end up with exceptions and complexity within the components. But; we do provide it for the checkbox and radio as you can see within those components. If you don't need the label you can use the base component as you can find within the examples.

The base button doesn't have any styling; here, we only use the x-rapidez::tag. All other buttons use the button/button, which contains the basic styling for buttons, such as padding, hover effects, and the disabled state. The button variants contain styling for the background and text color. There is only one exception: the button/slider, which has more custom styling than the other button variants.

Installation

composer require rapidez/blade-components

And include the CSS file in your resources/css/app.css:

@import '../../vendor/rapidez/blade-components/resources/css/package.css';

Make sure you add the blade components to the tailwind sources:

@source "../../vendor/rapidez/blade-components/resources/views/**/*.blade.php";

If you're not using Tailwind yet, you've to make sure you've setup Tailwind 4 with these plugins:

A minimal setup can be found in this repos app.css, package.json and vite.config.js.

More information about the usage and variables can be found in the Rapidez docs: https://docs.rapidez.io/5.x/theming.html#css

Views

If you like to change the components you can publish the views with:

php artisan vendor:publish --tag=rapidez-blade-components-views

Read more component

The readmore component includes some Javascript, we're using a Blade Stack named foot for that. Make sure you've an @stack('foot') before your closing </body> tag. Within Rapidez this is already present within the layouts/app.blade.php.

Slideover

The slideover component uses a dialog with commandfor, with browser support since 2025. It also has a secondary variant using a popover, which only has browser support since mid-2024.

If you want to use a polyfill for the dialog variant, you should add the invokers-polyfill npm package to your project:

yarn add -D invokers-polyfill

If you also wish to use the popover variant, we provide an extension to this polyfill that essentially just turns all popover variant slideovers into the dialog variant on unsupported browsers. To use this polyfill, include the .../js/polyfill.js file that comes with this package.

Usage

Just like any other Blade component, check out the Laravel Blade docs and the examples within the components code linked above. All components are prefixed with x-rapidez:: to avoid any conflicts with existing Blade components within your project.

Basic examples

Input with a label

<label>
    <x-rapidez::label>Something</x-rapidez::label>
    <x-rapidez::input name="something" class="extra-styling" />
</label>

Checkbox

<x-rapidez::input.checkbox name="something">
    @lang('Translatable label')
</x-rapidez::input.checkbox>

Prose

<x-rapidez::prose>
    Content
</x-rapidez::prose>

Accordion

<x-rapidez::accordion>
    <x-slot:label>Title</x-slot:label>
    <x-slot:content>
        Collapsable content goes here
    </x-slot:content>
</x-rapidez::accordion>

Slideover

<button commandfor="example" command="show-modal">
    Open slideover
</button>

<x-rapidez::slideover id="example" closedby="any">
    <x-rapidez::slideover.header>
        Title
        <x-rapidez::slideover.close commandfor="example" command="close" />
    </x-rapidez::slideover.header>
    <x-rapidez::slideover.content>
        Content
    </x-rapidez::slideover.content>
    <x-rapidez::slideover.footer>
        Footer
    </x-rapidez::slideover.footer>
</x-rapidez::slideover>

Make sure to add this class to your html tag to prevent scrolling when the slideover is open:

<html class="has-[:is([popover]:popover-open,dialog[open])]:overflow-clip">

Tag

It is a Blade version of a dynamic Vue component

Usage
<x-rapidez::tag is="span" class="font-bold">
    Something
</x-rapidez::tag>

which will result in

<span class="font-bold">
    Something
</span>

Changing components

If you like to change the components you can publish the views with:

php artisan vendor:publish --tag=rapidez-blade-components-views

Preview

There is a preview Blade file included with all the components, to view that in your project you could register a route for it within routes/web.php and visit the /components route from your browser:

Route::view('components', 'rapidez::components-preview');

Development

When you're working on this package you should first install the frontend dependencies with yarn, create an initial build with yarn build, symlink the public build with yarn symlink-public and to show a preview in the browser use yarn preview.

License

GNU General Public License v3. Please see License File for more information.

Releases

Packages

Used by

Contributors

Languages