Select
MoleculeLabel + select + hint + error anatomy. appearance-none ile native dropdown stilini override eder, chevron ikonu ile.
<%- include('modules/ui/Select', {
label: 'Role',
placeholder: 'Select a role…',
options: [
{ value: 'admin', label: 'Admin' },
{ value: 'editor', label: 'Editor' },
{ value: 'viewer', label: 'Viewer' },
]
}) %>
Determines access level.
<%- include('modules/ui/Select', {
label: 'Role',
hint: 'Determines access level.',
value: 'editor',
options: ROLES
}) %>
Please select a plan.
<%- include('modules/ui/Select', {
label: 'Plan',
placeholder: 'Select a plan',
required: true,
error: 'Please select a plan.',
options: PLANS
}) %>
<%- include('modules/ui/Select', { label: 'Plan', disabled: true, value: 'editor', options: ROLES }) %>
<%
var _id = locals.id || 'select-' + Math.random().toString(36).substr(2, 9);
var _dis = locals.disabled ? 'disabled' : '';
var _req = locals.required ? 'required' : '';
var _opts = locals.options || [];
var _sz = locals.size || 'md';
var sc = {
sm: 'px-2.5 py-1.5 text-sm',
md: 'px-3 py-2 text-sm',
lg: 'px-4 py-3 text-base',
}[_sz] || 'px-3 py-2 text-sm';
var baseClass = 'block w-full rounded-md border bg-surface-base text-text-primary appearance-none focus:outline-none focus:ring-2 focus:ring-border-focus disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-surface-sunken transition-colors';
var stateClass = locals.error
? 'border-error ring-1 ring-error bg-error-subtle'
: 'border-border hover:border-border-strong';
%>
<% if (locals.label) { %>
<% } %>
<% if (locals.hint || locals.error) { %>
<%= locals.error || locals.hint %>
<% } %>