<div data-slot='dropdown-menu' data-default-value='featured' data-close-on-select='false'>
<button type='button' data-slot='dropdown-menu-trigger' data-button data-variant='outline'>
Menu
<svg
class='icon'
data-slot='icon'
viewBox='0 0 24 24'
fill='none'
stroke='currentColor'
stroke-width='2'
stroke-linecap='round'
stroke-linejoin='round'
aria-hidden='true'
focusable='false'
>
<circle cx='12' cy='12' r='1'/><circle cx='19' cy='12' r='1'/><circle cx='5' cy='12' r='1'/>
</svg>
</button>
<div data-slot='dropdown-menu-portal'>
<div data-slot='dropdown-menu-positioner'>
<div data-slot='dropdown-menu-content' hidden>
<p data-slot='dropdown-menu-label'>Sort by</p>
<button type='button' data-slot='dropdown-menu-radio-item' data-value='featured'>
Featured
<span data-slot='dropdown-menu-item-indicator'>
<svg
class='icon'
data-slot='icon'
viewBox='0 0 24 24'
fill='none'
stroke='currentColor'
stroke-width='2'
stroke-linecap='round'
stroke-linejoin='round'
aria-hidden='true'
focusable='false'
>
<path d='M20 6 9 17l-5-5'/>
</svg>
</span>
</button>
<button type='button' data-slot='dropdown-menu-radio-item' data-value='newest'>
Newest
<span data-slot='dropdown-menu-item-indicator'>
<svg
class='icon'
data-slot='icon'
viewBox='0 0 24 24'
fill='none'
stroke='currentColor'
stroke-width='2'
stroke-linecap='round'
stroke-linejoin='round'
aria-hidden='true'
focusable='false'
>
<path d='M20 6 9 17l-5-5'/>
</svg>
</span>
</button>
<div data-slot='dropdown-menu-separator'></div>
<button type='button' data-slot='dropdown-menu-checkbox-item' data-value='in_stock'>
In stock only
<span data-slot='dropdown-menu-item-indicator'>
<svg
class='icon'
data-slot='icon'
viewBox='0 0 24 24'
fill='none'
stroke='currentColor'
stroke-width='2'
stroke-linecap='round'
stroke-linejoin='round'
aria-hidden='true'
focusable='false'
>
<path d='M20 6 9 17l-5-5'/>
</svg>
</span>
</button>
</div>
</div>
</div>
</div>Installation
npx shadcn@latest add https://ui.full.dev/r/liquid/dropdown-menu.json https://ui.full.dev/r/liquid/icon.json https://ui.full.dev/r/liquid/button.json
Follow the one-time layout setup. A full components install already includes this item.
Usage
After this install, render these once in the layout head before theme overrides and other modules. The full ui hook already includes them. The command also installs the parts used in this example.
{% render 'ui-init' %}
{% render 'ui-popup' %}
{% render 'ui-triggers' %}
{% render 'ui-runtime' %}
{% render 'ui-dropdown-menu' %}
{% render 'ui-icon' %}
{% render 'ui-button' %}
The preview and its Usage tab render the same native Liquid source. Use data-slot for parts, data-variant for variants and data-size for sizes. Keep your store’s labels, translations and Shopify data in your theme.