Drawer
v0.0.10
mix mishka.ui.gen.component drawer
Overview of the Phoenix and LiveView Drawer Component
The Mishka Chelekom Drawer component allows you to create flexible and customizable sliding panels for displaying hidden content, such as navigation, sidebars, or additional information. It's a versatile component that can be positioned on the left, right, top, or bottom of the viewport, providing an intuitive and accessible way to display or hide content as needed. The drawer can be easily integrated with Phoenix and Phoenix LiveView, making it an ideal solution for enhancing user interactivity.
This Phoenix LiveView component is perfect for enhancing user experience by providing dynamic and interactive sliding panels that can be triggered by various actions, offering both visual appeal and functional utility.
About LiveView JS module commands
In the drawer component, there are three attributes that allow users to execute custom LiveView JS commands when certain actions like showing or hiding occur. These attributes are:
- on_hide: This attribute lets the user execute an additional JavaScript command when the drawer is hidden, alongside the default toggle action. For instance, a user might want to push some data to the server or trigger another function when the drawer hides.
- on_show: This attribute allows you to run a custom JavaScript command when the drawer is shown. Users can, for example, send data, log an event, or perform any other action when the drawer is displayed.
- on_hide_away: This attribute allows for the execution of a JavaScript command when the drawer is hidden by clicking outside of it. This could be useful for logging interactions or sending specific data back to the server.
These attributes give developers more control over the interactions with the drawer, allowing for complex actions to be performed using custom JavaScript beyond just the default show/hide behavior.
Base Variant
Base Variant
<.drawer id="unique_id"></.drawer>Default Variant
The default style of the Mishka Chelekom drawer applies a solid background and border that change based on user interaction, making it perfect for delivering important notifications. With just a single setting, you can select from a range of color options, ensuring easy customization to match various design styles. Default variant have also white and dark colors which are the same colors in the dark and light mode.
Default Variant
<.drawer id="unique_id" color="natural"></.drawer>
<.drawer id="unique_id" color="white"></.drawer>
<.drawer id="unique_id" color="dark"></.drawer>
<.drawer id="unique_id" color="primary"></.drawer>
<.drawer id="unique_id" color="secondary"></.drawer>
<.drawer id="unique_id" color="success"></.drawer>
<.drawer id="unique_id" color="warning"></.drawer>
<.drawer id="unique_id" color="danger"></.drawer>
<.drawer id="unique_id" color="info"></.drawer>
<.drawer id="unique_id" color="silver"></.drawer>
<.drawer id="unique_id" color="misc"></.drawer>
<.drawer id="unique_id" color="dawn"></.drawer>Outline Variant
The outline style of the Mishka Chelekom drawer features a border. Using a single setting, you can choose from various color variants to suit your design needs.
Outline Variant
<.drawer id="unique_id" variant="outline" color="natural"></.drawer>
<.drawer id="unique_id" variant="outline" color="primary"></.drawer>
<.drawer id="unique_id" variant="outline" color="secondary"></.drawer>
<.drawer id="unique_id" variant="outline" color="success"></.drawer>
<.drawer id="unique_id" variant="outline" color="warning"></.drawer>
<.drawer id="unique_id" variant="outline" color="danger"></.drawer>
<.drawer id="unique_id" variant="outline" color="info"></.drawer>
<.drawer id="unique_id" variant="outline" color="silver"></.drawer>
<.drawer id="unique_id" variant="outline" color="misc"></.drawer>
<.drawer id="unique_id" variant="outline" color="dawn"></.drawer>Transparent Variant
The transparent variant of the Mishka Chelekom drawer is similar to the default variant, but without border and background color.
Transparent Variant
<.drawer id="unique_id" variant="transparent" color="natural"></.drawer>
<.drawer id="unique_id" variant="transparent" color="primary"></.drawer>
<.drawer id="unique_id" variant="transparent" color="secondary"></.drawer>
<.drawer id="unique_id" variant="transparent" color="success"></.drawer>
<.drawer id="unique_id" variant="transparent" color="warning"></.drawer>
<.drawer id="unique_id" variant="transparent" color="danger"></.drawer>
<.drawer id="unique_id" variant="transparent" color="info"></.drawer>
<.drawer id="unique_id" variant="transparent" color="silver"></.drawer>
<.drawer id="unique_id" variant="transparent" color="misc"></.drawer>
<.drawer id="unique_id" variant="transparent" color="dawn"></.drawer>Bordered Variant
The Bordered variant of the Mishka Chelekom drawer has lighter background and a border. Bordered variant have also white and dark colors which are the same colors in the dark and light mode.
Bordered Variant
<.drawer id="unique_id" variant="bordered" color="natural"></.drawer>
<.drawer id="unique_id" variant="bordered" color="white"></.drawer>
<.drawer id="unique_id" variant="bordered" color="dark"></.drawer>
<.drawer id="unique_id" variant="bordered" color="primary"></.drawer>
<.drawer id="unique_id" variant="bordered" color="secondary"></.drawer>
<.drawer id="unique_id" variant="bordered" color="success"></.drawer>
<.drawer id="unique_id" variant="bordered" color="warning"></.drawer>
<.drawer id="unique_id" variant="bordered" color="danger"></.drawer>
<.drawer id="unique_id" variant="bordered" color="info"></.drawer>
<.drawer id="unique_id" variant="bordered" color="silver"></.drawer>
<.drawer id="unique_id" variant="bordered" color="misc"></.drawer>
<.drawer id="unique_id" variant="bordered" color="dawn"></.drawer>Gradient Variant
The gradient variant of the Mishka Chelekom drawer has gradients in various colors.
Gradient Variant
<.drawer id="unique_id" variant="gradient" color="natural"></.drawer>
<.drawer id="unique_id" variant="gradient" color="primary"></.drawer>
<.drawer id="unique_id" variant="gradient" color="secondary"></.drawer>
<.drawer id="unique_id" variant="gradient" color="success"></.drawer>
<.drawer id="unique_id" variant="gradient" color="warning"></.drawer>
<.drawer id="unique_id" variant="gradient" color="danger"></.drawer>
<.drawer id="unique_id" variant="gradient" color="info"></.drawer>
<.drawer id="unique_id" variant="gradient" color="silver"></.drawer>
<.drawer id="unique_id" variant="gradient" color="misc"></.drawer>
<.drawer id="unique_id" variant="gradient" color="dawn"></.drawer>Border prop
The border prop offers values like "extra_small", "small", "medium", "large", and "extra_large".
Border prop
<.drawer id="unique_id" border="extra_small"></.drawer>
<.drawer id="unique_id" border="small"></.drawer>
<.drawer id="unique_id" border="medium"></.drawer>
<.drawer id="unique_id" border="large"></.drawer>
<.drawer id="unique_id" border="extra_large"></.drawer>Size prop
The size prop allows developers to control the overall size of the drawer component. It offers predefined values such as extra_small, small, medium, large, and extra_large, which adjust the width or height of the drawer depending on its position. For drawers positioned on the left or right of the screen, the prop adjusts the width, while for drawers positioned at the top or bottom, it controls the height. This flexibility ensures the drawer can fit various design requirements, making it adaptable for different content and use cases.
Size prop
<.drawer id="unique_id" size="extra_small"></.drawer>
<.drawer id="unique_id" size="small"></.drawer>
<.drawer id="unique_id" size="medium"></.drawer>
<.drawer id="unique_id" size="large"></.drawer>
<.drawer id="unique_id" size="extra_large"></.drawer>Title and title class prop
The title attribute allows you to set a custom title for the drawer component, providing a clear and descriptive heading for its content. The title_class attribute enables you to apply a custom class to the title, allowing for flexible styling and integration with your design system. If no specific class is provided, a default appearance is used, but the option to customize the title ensures consistency with the rest of your design.
Title and title class prop
<.drawer id="drawer-title" title="Drawer Title" title_class="your_classes"></.drawer>Position prop
The position prop controls where the drawer will be displayed on the screen. By default, it is set to left, which positions the drawer on the left side of the viewport. The other available values areright,top, andbottom, which place the drawer on the corresponding sides of the screen. Each of these positions adjusts the drawer's layout and ensures that it takes the appropriate space and orientation based on the selected position. This flexibility allows developers to choose the best placement for the drawer depending on the design and user interaction requirements.
Position prop
<.drawer id="unique_id" position="left"></.drawer>
<.drawer id="unique_id" position="right"></.drawer>
<.drawer id="unique_id" position="top"></.drawer>
<.drawer id="unique_id" position="bottom"></.drawer>Show prop
The show attribute in the drawer component determines whether the drawer is visible as soon as the page mounts. If this attribute is set to true, the drawer will automatically open when the page loads, making the content immediately accessible without requiring user interaction. By default, this attribute is set to false, keeping the drawer hidden until it is explicitly triggered.
<.drawer id="unique_id" show={true}></.drawer>
<!--You can omit specifying the show prop if its value is false-->
<.drawer id="unique_id" show={false}></.drawer>
<.drawer id="unique_id"></.drawer>Header slot
The header slot allows you to define a customizable header for the drawer component. This slot is optional, and when used, it accepts HEEx content, giving you the flexibility to include any markup or dynamic content within the header. The header slot can be populated with titles, icons, buttons, or any other elements relevant to the drawer's context. This feature ensures that the header of the drawer can be fully tailored to fit your design and functionality needs, enhancing the drawer's usability and visual presentation.
Header slot
<.drawer id="unique_id">
<:header>
<div>Content within header slot</div>
</:header>
</.drawer>Attributes
| Name | Type | Default | Values | Required | Description |
|---|---|---|---|---|---|
id
|
string
| — | — | Yes | A unique identifier is used to manage state and interaction |
title
|
string
| — | — | No | Specifies the title of the element |
title_class
|
string
| — | — | No | Determines custom class for the title |
variant
|
string
|
base
|
defaultoutlinetransparentborderedgradientbase
| No | Determines the style |
color
|
string
|
natural
|
basenaturalwhitedarkprimarysecondarysuccesswarningdangerinfosilvermiscdawn
| No | Determines color theme |
size
|
string
|
large
|
extra_smallsmallmediumlargeextra_large
| No | Determines the overall size of the elements, including padding, font size, and other items |
border
|
string
|
extra_small
| — | No | Determines border style |
position
|
string
|
left
| — | No | Determines the element position |
class
|
any
| — | — | No | Custom CSS class for additional styling to drawer wrapper |
close_class
|
string
| — | — | No | Custom CSS class for additional styling to close button |
content_class
|
string
| — | — | No | Custom CSS class for additional styling to content |
wrapper_class
|
string
| — | — | No | Custom CSS class for additional styling to wrapper |
overlay_class
|
string
| — | — | No | Custom CSS class for additional styling to overlay |
on_hide
|
JS
| — | — | No | Custom JS module for on_hide action |
on_show
|
JS
| — | — | No | Custom JS module for on_show action |
on_hide_away
|
JS
| — | — | No | Custom JS module for on_hide_away action |
show
|
boolean
|
false
| — | No | Show element |
rest
|
global
| — | — | No | Global attributes can define defaults which are merged with attributes provided by the caller |
Slots
| Name | Required | Description |
|---|---|---|
header
| No | Specifies element's header that accepts heex |
inner_block
| No | Inner block that renders HEEx content |
Options
Each option takes one or more of its values, separated by commas.
| Option | Values |
|---|---|
--variant
|
defaultoutlinetransparentborderedgradientbase
|
--color
|
basenaturalwhitedarkprimarysecondarysuccesswarningdangerinfosilvermiscdawn
|
--size
|
extra_smallsmallmediumlargeextra_large
|
--module
| A module name of your own |
What it generates
mix mishka.ui.gen.component drawer