The UI Package
TailwindCSS, Alpine.js and Laravel Livewire UI kit for Artisans.
📋 Requirements
- Requires PHP 8.1+ (at least 8.1.21 recommended to avoid potential bugs).
- Requires Node JS 18.16+ (at least 18.16.1 recommended to avoid potential bugs).
- Requires Composer >=2.5.8 to manage PHP dependencies.
- Requires pnpm@^8.0.0 to manage TypeScript dependencies.
- Requires Git ~2.40.0 to manage source code versions.
🎉 Getting Started
⚡️ Installation
Install the Sikessem UI kit using Composer:
- By adding the
sikessem/uidependency to yourcomposer.jsonfile:
{ "require" : { "sikessem/ui": "self.version" }}- Or by including the dependency:
composer require sikessem/ui --no-dev🧑💻 Usage
📝 Syntax
There are several ways to use Sikessem’s UI components.
In the following examples component-name represents the name of the desired UI component. If you want to use the text component, replace component-name with text as needed.
You can find the list of all components here.
View namespace
<x-ui::component-name property="value"> Content</x-ui::component-name>Component alias
<x-ui-component-name property="value"> Content</x-ui-component-name>Component tags
<s-component-name property="value"/><s-component-name property="value"> {{ $slot }}</s-component-name>Component slots
<s-component-name property="value"> <s:slot-name slot-property="property-value"> My Slot </s:slot-name></s-component-name>Blade directives
Render a UI component:
@ui('component-name', ['property' => 'value'], 'Optional component slot or content')If component-name is not a UI component it will be rendered as an HTML element.
Render an HTML orphan tag:
@tag('element-name', ['property' => 'value'])Render an HTML paired tag:
@tag('element-name', ['property' => 'value']) Here, element content or nothing.@endtagNote that the name of the element is not specified when closing. This is automatically detected according to the nesting order of the paired elements.
ui() helper
ui()->make('component-name', ['property' => 'value'], 'content')UI facade
UI::make('component-name', ['property' => 'value'], 'content')🍱 UI Components
In the following examples, we will use component tags. However, the result will be the same if you prefer to use another syntax.
Text component
Allows to translate and/or escape a text:
This will output the following HTML:
Link component
Create an anchor pointing to a route or URL:
<s-link route="home">Back to home</s-link><s-link href="/">Back to home</s-link>This will output the following HTML:
<a href="/">Back to home</a><a href="http://localhost/">Back to home</a>Button component
The Blade input:
<s-button>Click me</s-button>The HTML output:
<button type="button">Click me</button>The Blade input:
<s-button value="Click me"/>The HTML output:
<input type="button" value="Click me"/>The Blade input:
<s-button href="/">Click me</s-button>The HTML output:
<a href="http://localhost">Click me</a>The Blade input:
<s-submit-button>Click me</s-submit-button>The HTML output:
<button type="submit">Click me</button>The Blade input:
<s-reset-button>Click me</s-reset-button>The HTML output:
<button type="reset">Click me</button>The Blade input:
<s-image-button src="..." alt="...">Click me</s-image-button>The HTML output:
<button type="image" src="..." alt="...">Click me</button>Menu component
Create a menu containing a list of entries:
<s-menu ordered :list="['Red', 'Green', 'Blue']"/><s-menu href="['Color' => ['Red', 'Green', 'Blue'], 'Author' => ['Kessé Emmanuel', 'Sigui']]"/>This will output the following HTML:
<ol> <li>Red</li> <li>Green</li> <li>Blue</li></ol><ul> <li> Color <ul> <li>Red</li> <li>Green</li> <li>Blue</li> </ul> </li> <li> Author <ul> <li>Kessé Emmanuel</li> <li>Sigui</li> </ul> </li></ul>Label component
Create a label:
<s-label>Content</s-label><s-label for="name" text="Name"/>This will output the following HTML:
<label>Content</label><label for="name">Name</label>Flash component
Create a flash:
<s-flash type="info"/><s-flash class="alert" type="info" message="Default info"/>If session “info” was set to “Info”, the output will be:
<p>Info</p>Otherwise, the output will be:
<p></p>Or (in the second example):
<p class="alert">Default info</p>Flashes component
<s-flashes :messages="['info' => 'Info', 'warning']"/>If the “info” and “warning” sessions have been set to “Info” and “Warning” respectively, the output will be:
<ul> <li>Info</li> <li>Warning</li></ul>Otherwise, the output will be:
<ul> <li>Info</li></ul>Form component
Create a form:
<s-form> Put the form content here</s-form>This will output the following HTML:
<form method="GET" action="#"> <input type="hidden" name="_token" value="..."></form>Error component
Create a error:
<s-error field="name"/>Errors component
<s-errors/>Entry component
Create an entry:
<s-entry type="email"/><s-entry type="textarea" name="comment"/><s-entry type="name" autocomplete :datalist=""/>This will output the following HTML:
<input type="email" name="email" id="email" autocomplete="email" :datalist="[\'Emmanuel\', \'Kessé\', \'Sigui\']" aria-invalid="false"/><textarea name="comment" id="comment" autocomplete="comment" aria-invalid="false"></textarea><input type="name" name="name" id="name" autocomplete="name" list="name-input-datalist" aria-invalid="false"/><datalist id="text-input-datalist"> <option >Emmanuel</option> <option >Kessé</option> <option >Sigui</option></datalist>',Icon component
<s-icon name="user-group"/><s-icon element="svg" name="user-group" type="solid" width="20" height="20" size="20"/><s-icon element="i" name="user-group" type="solid" width="20" height="20" size="20"/><s-icon element="img" name="user-group" type="solid" width="20" height="20" size="20"/>🎨 Custom components
Create custom components from config/ui.php file.
@ui('custom', ['class' => 'element', 'id' => 'myElement'], '') My custom component@enduiOutput:
<custom-element class="my custom element" id="myElement"> My custom component</custom-element>Component styles
Color utilities
<div class="text-red bg-red-light-0 border-red-dark-0"></div>