No notes defined.
<!-- Default -->
<span class="select">
<select id="field-select">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
<!-- With Groups -->
<span class="select">
<select id="field-select">
<option value="" disabled="disabled" selected="selected">Please select</option>
<optgroup label="Group 1">
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</optgroup>
<optgroup label="Group 2">
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</optgroup>
</select>
</span>
<!-- Required -->
<span class="select">
<select id="field-uniqueID-required" required="">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
<!-- Valid -->
<span class="select">
<select id="field-uniqueID-valid" required="" aria-invalid="false">
<option value="" disabled="disabled" selected="selected">Please select</option>
<option value="1">
Option 1
</option>
<option value="2" selected="selected">
Option 2
</option>
<option value="3">
Option 3
</option>
</select>
</span>
<!-- Invalid -->
<span class="select">
<select id="field-uniqueID-invalid" required="" aria-invalid="true">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
<!-- Disabled -->
<span class="select" data-disabled="true">
<select id="field-uniqueID-disabled" disabled="disabled">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
<!-- Doc Only -->
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Default</h2>
<div class="doc-variant-configuration">
</div>
</header>
<span class="select">
<select id="field-select">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">With Groups</h2>
<div class="doc-variant-configuration">
</div>
</header>
<span class="select">
<select id="field-select">
<option value="" disabled="disabled" selected="selected">Please select</option>
<optgroup label="Group 1">
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</optgroup>
<optgroup label="Group 2">
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</optgroup>
</select>
</span>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Required</h2>
<div class="doc-variant-configuration">
<ul data-label="State">
<li>[required]</li>
</ul>
</div>
</header>
<span class="select">
<select id="field-uniqueID-required" required="">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Valid</h2>
<div class="doc-variant-configuration">
<ul data-label="State">
<li>[data-invalid="false"]</li>
</ul>
</div>
</header>
<span class="select">
<select id="field-uniqueID-valid" required="" aria-invalid="false">
<option value="" disabled="disabled" selected="selected">Please select</option>
<option value="1">
Option 1
</option>
<option value="2" selected="selected">
Option 2
</option>
<option value="3">
Option 3
</option>
</select>
</span>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Invalid</h2>
<div class="doc-variant-configuration">
<ul data-label="State">
<li>[data-invalid="true"]</li>
</ul>
</div>
</header>
<span class="select">
<select id="field-uniqueID-invalid" required="" aria-invalid="true">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Disabled</h2>
<div class="doc-variant-configuration">
<ul data-label="State">
<li>[disabled]</li>
</ul>
</div>
</header>
<span class="select" data-disabled="true">
<select id="field-uniqueID-disabled" disabled="disabled">
<option value="" disabled="disabled" selected="selected">Please select</option>
<hr />
<option value="-1">
Show all
</option>
<hr />
<option value="1">
Option 1
</option>
<option value="2">
Option 2
</option>
<option value="3">
Option 3
</option>
<option value="4" disabled="disabled">
Unavailable option
</option>
</select>
</span>
</section>
<!-- Default -->
<span class="select"
{{~#if is-disabled}} data-disabled="true"{{/if~}}
>
<select
{{~#id}} id="field-{{.}}"{{/id~}}
{{~#name}} name="{{.}}"{{/name~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
{{~#is-required}} required=""{{/is-required~}}
{{~#if is-valid}} aria-invalid="false"{{/if~}}
{{~#if is-invalid}} aria-invalid="true"{{/if~}}
>
{{#placeholder}}
<option value="" disabled="disabled" selected="selected">{{{.}}}</option>
{{/placeholder}}
{{#options}}
{{#if label}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
{{#optiongroups}}
<optgroup label="{{label}}">
{{#options}}
{{#if value}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
</optgroup>
{{/optiongroups}}
</select>
</span>
<!-- With Groups -->
<span class="select"
{{~#if is-disabled}} data-disabled="true"{{/if~}}
>
<select
{{~#id}} id="field-{{.}}"{{/id~}}
{{~#name}} name="{{.}}"{{/name~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
{{~#is-required}} required=""{{/is-required~}}
{{~#if is-valid}} aria-invalid="false"{{/if~}}
{{~#if is-invalid}} aria-invalid="true"{{/if~}}
>
{{#placeholder}}
<option value="" disabled="disabled" selected="selected">{{{.}}}</option>
{{/placeholder}}
{{#options}}
{{#if label}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
{{#optiongroups}}
<optgroup label="{{label}}">
{{#options}}
{{#if value}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
</optgroup>
{{/optiongroups}}
</select>
</span>
<!-- Required -->
<span class="select"
{{~#if is-disabled}} data-disabled="true"{{/if~}}
>
<select
{{~#id}} id="field-{{.}}"{{/id~}}
{{~#name}} name="{{.}}"{{/name~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
{{~#is-required}} required=""{{/is-required~}}
{{~#if is-valid}} aria-invalid="false"{{/if~}}
{{~#if is-invalid}} aria-invalid="true"{{/if~}}
>
{{#placeholder}}
<option value="" disabled="disabled" selected="selected">{{{.}}}</option>
{{/placeholder}}
{{#options}}
{{#if label}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
{{#optiongroups}}
<optgroup label="{{label}}">
{{#options}}
{{#if value}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
</optgroup>
{{/optiongroups}}
</select>
</span>
<!-- Valid -->
<span class="select"
{{~#if is-disabled}} data-disabled="true"{{/if~}}
>
<select
{{~#id}} id="field-{{.}}"{{/id~}}
{{~#name}} name="{{.}}"{{/name~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
{{~#is-required}} required=""{{/is-required~}}
{{~#if is-valid}} aria-invalid="false"{{/if~}}
{{~#if is-invalid}} aria-invalid="true"{{/if~}}
>
{{#placeholder}}
<option value="" disabled="disabled" selected="selected">{{{.}}}</option>
{{/placeholder}}
{{#options}}
{{#if label}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
{{#optiongroups}}
<optgroup label="{{label}}">
{{#options}}
{{#if value}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
</optgroup>
{{/optiongroups}}
</select>
</span>
<!-- Invalid -->
<span class="select"
{{~#if is-disabled}} data-disabled="true"{{/if~}}
>
<select
{{~#id}} id="field-{{.}}"{{/id~}}
{{~#name}} name="{{.}}"{{/name~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
{{~#is-required}} required=""{{/is-required~}}
{{~#if is-valid}} aria-invalid="false"{{/if~}}
{{~#if is-invalid}} aria-invalid="true"{{/if~}}
>
{{#placeholder}}
<option value="" disabled="disabled" selected="selected">{{{.}}}</option>
{{/placeholder}}
{{#options}}
{{#if label}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
{{#optiongroups}}
<optgroup label="{{label}}">
{{#options}}
{{#if value}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
</optgroup>
{{/optiongroups}}
</select>
</span>
<!-- Disabled -->
<span class="select"
{{~#if is-disabled}} data-disabled="true"{{/if~}}
>
<select
{{~#id}} id="field-{{.}}"{{/id~}}
{{~#name}} name="{{.}}"{{/name~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
{{~#is-required}} required=""{{/is-required~}}
{{~#if is-valid}} aria-invalid="false"{{/if~}}
{{~#if is-invalid}} aria-invalid="true"{{/if~}}
>
{{#placeholder}}
<option value="" disabled="disabled" selected="selected">{{{.}}}</option>
{{/placeholder}}
{{#options}}
{{#if label}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
{{#optiongroups}}
<optgroup label="{{label}}">
{{#options}}
{{#if value}}
<option value="{{value}}"
{{~#is-selected}} selected="selected"{{/is-selected~}}
{{~#is-disabled}} disabled="disabled"{{/is-disabled~}}
>
{{{label}}}
</option>
{{else}}
<hr/>
{{/if}}
{{/options}}
</optgroup>
{{/optiongroups}}
</select>
</span>
<!-- Doc Only -->
{{#variants}}
<section class="doc-variant">
<header class="doc-variant-header">
{{#title}}
<h2 class="doc-variant-title">{{{.}}}</h2>
{{/title}}
<div class="doc-variant-configuration">
{{#if states}}
<ul data-label="State">
{{#states}}
<li>{{{.}}}</li>
{{/states}}
</ul>
{{/if}}
</div>
</header>
{{#samples}}
{{render '@select' (contextData '@select' this) merge=true}}
{{/samples}}
</section>
{{/variants}}
/* Default */
{
"id": "select",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
]
}
/* With Groups */
{
"id": "select",
"placeholder": "Please select",
"options": null,
"optiongroups": [
{
"label": "Group 1",
"options": [
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
]
},
{
"label": "Group 2",
"options": [
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
]
}
]
}
/* Required */
{
"id": "uniqueID-required",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"is-required": true
}
/* Valid */
{
"id": "uniqueID-valid",
"placeholder": "Please select",
"options": [
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2,
"is-selected": true
},
{
"label": "Option 3",
"value": 3
}
],
"is-required": true,
"is-valid": true
}
/* Invalid */
{
"id": "uniqueID-invalid",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"is-required": true,
"is-invalid": true
}
/* Disabled */
{
"id": "uniqueID-disabled",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"is-disabled": true
}
/* Doc Only */
{
"id": "select",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"variants": [
{
"title": "Default",
"samples": {
"id": "select",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
]
}
},
{
"title": "With Groups",
"samples": {
"id": "select",
"placeholder": "Please select",
"options": null,
"optiongroups": [
{
"label": "Group 1",
"options": [
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
]
},
{
"label": "Group 2",
"options": [
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
]
}
]
}
},
{
"title": "Required",
"states": "[required]",
"samples": {
"id": "uniqueID-required",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"is-required": true
}
},
{
"title": "Valid",
"states": "[data-invalid=\"false\"]",
"samples": {
"id": "uniqueID-valid",
"placeholder": "Please select",
"options": [
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2,
"is-selected": true
},
{
"label": "Option 3",
"value": 3
}
],
"is-required": true,
"is-valid": true
}
},
{
"title": "Invalid",
"states": "[data-invalid=\"true\"]",
"samples": {
"id": "uniqueID-invalid",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"is-required": true,
"is-invalid": true
}
},
{
"title": "Disabled",
"states": "[disabled]",
"samples": {
"id": "uniqueID-disabled",
"placeholder": "Please select",
"options": [
{
"label": null
},
{
"label": "Show all",
"value": -1
},
{
"label": null
},
{
"label": "Option 1",
"value": 1
},
{
"label": "Option 2",
"value": 2
},
{
"label": "Option 3",
"value": 3
},
{
"label": "Unavailable option",
"value": 4,
"is-disabled": true
}
],
"is-disabled": true
}
}
]
}
@import "_select.settings.psi";
@import "_select.settings";
@import "_select.styles";
%select {
select {
padding-top: calc(#{list.nth($field_padding, 1)} + #{math.floor(math.div(list.nth($field_border-width, 3), 2))});
padding-bottom: calc(#{list.nth($field_padding, 1)} + #{math.ceil(math.div(list.nth($field_border-width, 3), 2))});
}
}
$select_marker_icon_stroke-width: 2 !default;
$select_marker_icon_stroke-width: 2 !default;
$select_marker_icon: '<svg width="32" height="32" viewBox="0 0 32 32" fill="none" stroke="{{color}}" stroke-width="#{$select_marker_icon_stroke-width}" xmlns="http://www.w3.org/2000/svg"><path d="M11.255 13.4451L16 18.5551L20.745 13.4451"/></svg>' !default;
$select_marker_width: (1em * $_line-height) + (2 * list.nth($field_padding, 1)) !default;
// FIXME: Styles have to be independent from element "field" (maybe there could be a base component defining boxes).
$select_styles: $field_styles !default;
$select_states: $field_states !default;
%select {
@include stack-spacing();
display: block;
width: 100%;
position: relative;
user-select: none;
&-marker {
position: absolute;
top: 50%; right: 0;
transform: translateY(-50%);
display: block;
height: 100%;
width: $select_marker_width;
@include tinted-svg($select_marker_icon);
pointer-events: none;
}
&::after {
content: "";
color: inherit;
@extend %select-marker;
}
&[data-disabled="true"],
&:has(select[disabled]) {
color: $_disabled-color;
}
select {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
width: 100%;
padding: $field_padding;
padding-right: $select_marker_width;
outline: transparent;
-webkit-appearance: none;
-moz-appearance: none;
@include styles($select_styles);
@include action-states($select_states);
&:hover:not([disabled]) {
cursor: pointer;
}
// IE10 Hack
&::-ms-expand {
display: none;
}
&[aria-invalid="false"] {
&:not(:focus) {
@include state-styles($select_states, valid);
}
}
&[aria-invalid="true"] {
&:not(:focus) {
@include state-styles($select_states, invalid);
}
}
&[disabled] {
@include state-styles($select_states, disabled);
cursor: default;
}
}
option { // Fix for non-readable text in themed components on Windows
background-color: $_PAGE-COLOR;
color: $_TEXT-COLOR;
}
}
.select {
@extend %select;
&-marker {
@extend %select-marker;
}
}