Attention: Since this element is very difficult to integrate into the form toggles, it should not be used yet, as its styling does not inherit as expected to the form toggles.
<!-- Default -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="toggle" value="" /><span class="toggle-marker"></span>
</span>
<!-- Default -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="toggle" value="" /><span class="toggle-marker"></span>
</span>
<!-- Checked -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="checked" value="" checked="checked" /><span class="toggle-marker"></span>
</span>
<!-- Valid -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="valid" value="" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<!-- Checked Valid -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="checked-valid" value="" checked="checked" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<!-- Invalid -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="invalid" value="" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<!-- Checked Invalid -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="checked-invalid" value="" checked="checked" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<!-- Disabled -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="disabled" value="" disabled="disabled" /><span class="toggle-marker"></span>
</span>
<!-- Checked Disabled -->
<span class="toggle is-checkbox">
<input class="toggle-input" role="switch" type="checkbox" name="checked-disabled" value="" checked="checked" disabled="disabled" /><span class="toggle-marker"></span>
</span>
<!-- Documentation only -->
<div class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Checkbox (Default)</h2>
<div class="doc-variant-configuration">
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
<option value="default">default</option>
<option value="dark">dark</option>
</select>
</label>
</div>
</header>
<div class="doc-variant-samples" data-theme>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="toggle" value="" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="checked" value="" checked="checked" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="valid" value="" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="checked-valid" value="" checked="checked" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="invalid" value="" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="checked-invalid" value="" checked="checked" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="disabled" value="" disabled="disabled" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox ">
<input class="toggle-input" role="switch" type="checkbox" name="checked-disabled" value="" checked="checked" disabled="disabled" /><span class="toggle-marker"></span>
</span>
</div>
</div>
<div class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Radio</h2>
<div class="doc-variant-configuration">
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
<option value="default">default</option>
<option value="dark">dark</option>
</select>
</label>
</div>
</header>
<div class="doc-variant-samples" data-theme>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="toggle" value="" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="checked" value="" checked="checked" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="valid" value="" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="checked-valid" value="" checked="checked" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="invalid" value="" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="checked-invalid" value="" checked="checked" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="disabled" value="" disabled="disabled" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-radio ">
<input class="toggle-input" role="switch" type="radio" name="checked-disabled" value="" checked="checked" disabled="disabled" /><span class="toggle-marker"></span>
</span>
</div>
</div>
<div class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Switch</h2>
<div class="doc-variant-configuration">
<ul data-label="Modifier">
<li>is-switch</li>
</ul>
</div>
<div class="doc-variant-configuration">
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
<option value="default">default</option>
<option value="dark">dark</option>
</select>
</label>
</div>
</header>
<div class="doc-variant-samples" data-theme>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="toggle" value="" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="checked" value="" checked="checked" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="valid" value="" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="checked-valid" value="" checked="checked" data-invalid="false" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="invalid" value="" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="checked-invalid" value="" checked="checked" data-invalid="true" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="disabled" value="" disabled="disabled" /><span class="toggle-marker"></span>
</span>
<span class="toggle is-checkbox is-switch ">
<input class="toggle-input" role="switch" type="checkbox" name="checked-disabled" value="" checked="checked" disabled="disabled" /><span class="toggle-marker"></span>
</span>
</div>
</div>
<!-- Default -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Default -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Checked -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Valid -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Checked Valid -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Invalid -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Checked Invalid -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Disabled -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Checked Disabled -->
<span class="toggle is-{{type}}{{#modifier}} {{{.}}}{{/modifier}}">
<input class="toggle-input" role="switch" type="{{type}}" name="{{name}}" value="{{{value}}}"{{#if is-checked}} checked="checked"{{/if}}{{#if is-disabled}} disabled="disabled"{{/if}}{{#if is-required}} required="" data-parsley-trigger="change"{{/if}}{{#parsley.mincheck}} data-parsley-mincheck="{{.}}"{{/parsley.mincheck}}{{#if is-valid}} data-invalid="false"{{/if}}{{#if is-invalid}} data-invalid="true"{{/if}}/><span class="toggle-marker"></span>
</span>
<!-- Documentation only -->
{{#sections}}
<div class="doc-variant">
<header class="doc-variant-header">
{{#title}}
<h2 class="doc-variant-title">{{{.}}}</h2>
{{/title}}
{{#if modifiers}}
<div class="doc-variant-configuration">
<ul data-label="Modifier">
{{#modifiers}}
<li>{{{.}}}</li>
{{/modifiers}}
</ul>
</div>
{{/if}}
{{#if themes}}
<div class="doc-variant-configuration">
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
{{#themes}}
<option value="{{{.}}}">{{{.}}}</option>
{{/themes}}
</select>
</label>
</div>
{{/if}}
</header>
{{#variants}}
<div class="doc-variant-samples"{{#if ../themes}} data-theme{{/if}}>
{{#samples}}
{{render '@toggle' (contextData '@toggle' this) merge=true}}
{{/samples}}
</div>
{{/variants}}
</div>
{{/sections}}
/* Default */
{
"type": "checkbox",
"name": "toggle"
}
/* Default */
{
"type": "checkbox",
"name": "toggle"
}
/* Checked */
{
"type": "checkbox",
"name": "checked",
"is-checked": true
}
/* Valid */
{
"type": "checkbox",
"name": "valid",
"is-valid": true
}
/* Checked Valid */
{
"type": "checkbox",
"name": "checked-valid",
"is-checked": true,
"is-valid": true
}
/* Invalid */
{
"type": "checkbox",
"name": "invalid",
"is-invalid": true
}
/* Checked Invalid */
{
"type": "checkbox",
"name": "checked-invalid",
"is-checked": true,
"is-invalid": true
}
/* Disabled */
{
"type": "checkbox",
"name": "disabled",
"is-disabled": true
}
/* Checked Disabled */
{
"type": "checkbox",
"name": "checked-disabled",
"is-checked": true,
"is-disabled": true
}
/* Documentation only */
{
"type": "checkbox",
"name": "toggle",
"sections": [
{
"title": "Checkbox (Default)",
"themes": [
"default",
"dark"
],
"variants": [
{
"samples": [
{
"type": "checkbox",
"name": "toggle",
"modifier": ""
},
{
"name": "checked",
"is-checked": true,
"modifier": ""
},
{
"name": "valid",
"is-valid": true,
"modifier": ""
},
{
"name": "checked-valid",
"is-checked": true,
"is-valid": true,
"modifier": ""
},
{
"name": "invalid",
"is-invalid": true,
"modifier": ""
},
{
"name": "checked-invalid",
"is-checked": true,
"is-invalid": true,
"modifier": ""
},
{
"name": "disabled",
"is-disabled": true,
"modifier": ""
},
{
"name": "checked-disabled",
"is-checked": true,
"is-disabled": true,
"modifier": ""
}
],
"modifier": "",
"type": ""
}
]
},
{
"title": "Radio",
"variants": [
{
"type": "radio",
"samples": [
{
"type": "radio",
"name": "toggle",
"modifier": ""
},
{
"name": "checked",
"is-checked": true,
"modifier": "",
"type": "radio"
},
{
"name": "valid",
"is-valid": true,
"modifier": "",
"type": "radio"
},
{
"name": "checked-valid",
"is-checked": true,
"is-valid": true,
"modifier": "",
"type": "radio"
},
{
"name": "invalid",
"is-invalid": true,
"modifier": "",
"type": "radio"
},
{
"name": "checked-invalid",
"is-checked": true,
"is-invalid": true,
"modifier": "",
"type": "radio"
},
{
"name": "disabled",
"is-disabled": true,
"modifier": "",
"type": "radio"
},
{
"name": "checked-disabled",
"is-checked": true,
"is-disabled": true,
"modifier": "",
"type": "radio"
}
],
"modifier": ""
}
],
"themes": [
"default",
"dark"
]
},
{
"title": "Switch",
"modifiers": "is-switch",
"variants": [
{
"modifiers": "is-switch",
"type": "checkbox",
"samples": [
{
"type": "checkbox",
"name": "toggle",
"modifier": "is-switch "
},
{
"name": "checked",
"is-checked": true,
"modifier": "is-switch ",
"type": "checkbox"
},
{
"name": "valid",
"is-valid": true,
"modifier": "is-switch ",
"type": "checkbox"
},
{
"name": "checked-valid",
"is-checked": true,
"is-valid": true,
"modifier": "is-switch ",
"type": "checkbox"
},
{
"name": "invalid",
"is-invalid": true,
"modifier": "is-switch ",
"type": "checkbox"
},
{
"name": "checked-invalid",
"is-checked": true,
"is-invalid": true,
"modifier": "is-switch ",
"type": "checkbox"
},
{
"name": "disabled",
"is-disabled": true,
"modifier": "is-switch ",
"type": "checkbox"
},
{
"name": "checked-disabled",
"is-checked": true,
"is-disabled": true,
"modifier": "is-switch ",
"type": "checkbox"
}
],
"modifier": "is-switch"
}
],
"themes": [
"default",
"dark"
]
}
]
}
@import "../field/_field.settings.psi";
$toggle_border-color: $_text-color !default;
$toggle_size: 20px !default;
$toggle_inset: 3px !default;
$toggle_slot_width: 40px !default;
$toggle_slot_height: $toggle_size + 2 !default;
@import "_toggle.settings";
@import "_toggle.styles";
%toggle--checkbox-marker {
border-radius: list.nth($field_border-radius, 1);
}
%toggle--radio {
&-marker {
&::after {
border-color: $_field-background-color;
}
}
}
@import "../field/_field.settings.psi";
$toggle_border-width: $_border-width !default;
$toggle_border-color: $_text-color !default;
$toggle_color: $_text-color !default;
$toggle_color--disabled: $_action-border-color--disabled !default;
$toggle_size: 20px !default;
$toggle_inset: 3px !default;
$toggle_slot_width: 40px !default;
$toggle_slot_height: $toggle_size + 2 !default;
$toggle_styles: (
width: $toggle_size,
height: $toggle_size,
position: relative,
bottom: .4em,
transform: translateY(50%),
margin-inline-start: 1px,
background-color: $_field-background-color,
color: $_field-color,
border: $toggle_border-width $toggle_border-color solid,
box-shadow: none,
transition: $_transition-duration--in,
transition-property: (border, background-color, box-shadow),
) !default;
$toggle_states--checked: (
default: (
background-color: $toggle_color,
color: $_page-color,
),
hover: (
),
focus: (
),
active: (
),
disabled: (
background-color: $toggle_color--disabled,
color: $_field-background-color,
border-color: transparent,
),
valid: (
),
invalid: (
background-color: $_negative-color,
color: $_negative-background-color,
),
) !default;
$toggle_size: 18px !default;
$toggle_inset: 3px !default;
$toggle_border-width: $_border-width !default;
$toggle_border-color: $_border-color !default;
$toggle_color: $_text-color !default;
$toggle_color--hover: $_action-border-color !default;
$toggle_color--disabled: $_action-border-color--disabled !default;
$toggle_checkbox_icon_stroke-width: 2 !default;
$toggle_checkbox_icon: '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="{{color}}" stroke-width="#{$toggle_checkbox_icon_stroke-width}" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 6.5L7.5 11L12.5 4"/></svg>' !default;
$toggle_slot_height: 8px !default;
$toggle_slot_width: 36px !default;
$toggle_slot_color: rgba(#7E7E7E, .3) !default;
$toggle_slot_image: '<svg width="#{math.div($toggle_slot_width, 1px)}" height="#{math.div($toggle_slot_height, 1px)}" viewBox="0 0 #{math.div($toggle_slot_width, 1px)} #{math.div($toggle_slot_height, 1px)}" fill="#{$toggle_slot_color}" xmlns="http://www.w3.org/2000/svg"><rect width="#{math.div($toggle_slot_width, 1px)}" height="#{math.div($toggle_slot_height, 1px)}" rx="#{math.div($toggle_slot_height, 2px)}"/></svg>' !default;
$toggle_styles: (
width: $toggle_size,
height: $toggle_size,
position: relative,
bottom: .4em,
transform: translateY(50%),
margin-inline-start: 1px,
background-color: $_page-color,
color: $_text-color,
border: $toggle_border-width $toggle_border-color solid,
box-shadow: none,
transition: $_transition-duration--in,
transition-property: (border, background-color, box-shadow),
) !default;
$toggle_states: (
default: $toggle_styles,
hover: (
box-shadow: 0 0 0 $_focus_border-width $toggle_color--hover,
),
focus: $_focus_styles,
active: (
),
disabled: (
border-color: $toggle_color--disabled,
),
valid: (
),
invalid: (
border-color: $_negative-color,
),
) !default;
$toggle_states--checked: (
default: (
background-color: $toggle_color,
color: $_page-color,
),
hover: (
),
focus: (
),
active: (
),
disabled: (
background-color: $toggle_color--disabled,
color: $_page-color,
border-color: transparent,
),
valid: (
),
invalid: (
background-color: $_negative-color,
color: white,
),
) !default;
$toggle_states--switch: (
default: (
bottom: auto,
transform: none,
background-color: $toggle_color,
border-radius: 50% !important,
transition-property: (border, box-shadow, background-color, left),
),
hover: (
),
focus: (
),
active: (
),
disabled: (
background-color: white,
background-image: linear-gradient($toggle_color--disabled, $toggle_color--disabled),
border: none,
),
valid: (
),
invalid: (
background-color: $_negative-color,
),
) !default;
$toggle_states--switch--checked: (
default: (
),
hover: (
),
focus: (
),
active: (
),
disabled: (
),
valid: (
),
invalid: (
),
) !default;
%toggle {
display: inline-block;
position: relative;
&-marker {
position: relative;
z-index: 1;
display: block;
pointer-events: none;
@include styles($toggle_styles);
&::after {
content: "";
display: block;
position: absolute;
inset: 0;
background: transparent center center no-repeat;
transition: inherit;
}
}
&-input {
opacity: 0;
position: absolute;
inset: (-1 * $toggle_inset);
z-index: 1;
cursor: pointer;
&[disabled],
&[aria-disabled="true"],
.is-disabled & {
cursor: default;
pointer-events: none;
}
&:not([disabled], [aria-disabled="true"]):hover ~ %toggle-marker {
@include state-styles($toggle_states, hover);
}
&:not([disabled], [aria-disabled="true"]):focus-visible ~ %toggle-marker {
@include state-styles($toggle_states, focus);
}
&[disabled] ~ %toggle-marker,
&[aria-disabled="true"] ~ %toggle-marker,
.is-disabled & ~ %toggle-marker {
@include state-styles($toggle_states, disabled);
}
[data-invalid="false"] & ~ %toggle-marker,
&[data-invalid="false"] ~ %toggle-marker,
& ~ %toggle-marker[data-invalid="false"],
&--valid ~ %toggle-marker {
@include state-styles($toggle_states, valid);
}
[data-invalid="true"] & ~ %toggle-marker,
&[data-invalid="true"] ~ %toggle-marker,
& ~ %toggle-marker[data-invalid="true"],
&--invalid ~ %toggle-marker {
@include state-styles($toggle_states, invalid);
}
&:checked ~ %toggle-marker {
@include state-styles($toggle_states--checked);
}
&:checked:not([disabled], [aria-disabled="true"]):hover ~ %toggle-marker {
@include state-styles($toggle_states--checked, hover);
}
&:checked:not([disabled], [aria-disabled="true"]):focus-visible ~ %toggle-marker {
@include state-styles($toggle_states--checked, focus);
}
&:checked[disabled] ~ %toggle-marker,
&:checked[aria-disabled="true"] ~ %toggle-marker {
@include state-styles($toggle_states--checked, disabled);
}
[data-invalid="false"] &:checked ~ %toggle-marker,
&[data-invalid="false"]:checked ~ %toggle-marker,
&--valid:checked ~ %toggle-marker {
@include state-styles($toggle_states--checked, valid);
}
[data-invalid="true"] &:checked ~ %toggle-marker,
&:checked[data-invalid="true"] ~ %toggle-marker,
&--invalid:checked ~ %toggle-marker {
@include state-styles($toggle_states--checked, invalid);
}
}
}
%toggle--checkbox {
&-marker {
&::after {
opacity: 0;
color: currentcolor;
background: center center no-repeat;
background-image: svg-url($toggle_checkbox_icon, white);
@supports (mask-image: url()) {
background-image: none;
background-color: currentcolor;
mask-image: svg-url($toggle_checkbox_icon, black);
mask-repeat: no-repeat;
mask-position: center center;
}
}
&--checked {
&::after {
opacity: 1;
}
}
}
%toggle-marker {
@extend %toggle--checkbox-marker;
}
%toggle-input:checked ~ %toggle-marker {
@extend %toggle--checkbox-marker--checked;
}
}
%toggle--radio {
&-marker {
width: ($toggle_size + 2);
height: ($toggle_size + 2);
border-radius: 50% !important;
&::after {
border-radius: 50% !important;
border: $toggle_inset solid $_page-color;
}
&--disabled {
&::after {
border-color: transparent;
}
}
}
%toggle-marker {
@extend %toggle--radio-marker;
}
%toggle-input:is(input[disabled]):not(:checked),
%toggle-input:is(input[data-disabled="true"]):not(:checked),
%toggle-input:is(input[aria-disabled="true"]):not(:checked),
input.is-disabled:not(:checked) %toggle-input {
~ %toggle-marker {
@extend %toggle--radio-marker--disabled;
}
}
}
%toggle--switch {
position: relative;
width: $toggle_slot_width;
&::before { // Slot
content: "";
position: absolute;
top: 0;
left: 1px;
display: block;
width: 100%;
height: 100%;
background: url(get-svg-data-url($toggle_slot_image)) center center no-repeat;
}
&-marker {
box-shadow: none;
margin: 0;
left: 0;
width: ($toggle_size + 2);
height: ($toggle_size + 2);
pointer-events: none;
transition-timing-function: ease-in-out;
@include state-styles($toggle_states--switch);
}
&-input {
&:not([disabled], [aria-disabled="true"]):hover ~ %toggle-marker {
@include state-styles($toggle_states--switch, hover);
}
&:not([disabled], [aria-disabled="true"]):focus-visible ~ %toggle-marker {
@include state-styles($toggle_states--switch, focus);
}
&[disabled] ~ %toggle-marker,
&[aria-disabled="true"] ~ %toggle-marker,
.is-disabled & ~ %toggle-marker {
@include state-styles($toggle_states--switch, disabled);
}
[data-invalid="false"] & ~ %toggle-marker,
&[data-invalid="false"] ~ %toggle-marker,
&--valid ~ %toggle-marker {
@include state-styles($toggle_states--switch, valid);
}
[data-invalid="true"] & ~ %toggle-marker,
&[data-invalid="true"] ~ %toggle-marker,
&--invalid ~ %toggle-marker {
@include state-styles($toggle_states--switch, invalid);
}
//***** Checked *****//
&:checked ~ %toggle-marker {
left: ($toggle_slot_width - $toggle_size);
@include state-styles($toggle_states--switch--checked);
}
&:checked:not([disabled], [aria-disabled="true"]):hover ~ %toggle-marker {
@include state-styles($toggle_states--switch--checked, hover);
}
&:checked:not([disabled], [aria-disabled="true"]):focus-visible ~ %toggle-marker {
@include state-styles($toggle_states--switch--checked, focus);
}
&:checked[disabled] ~ %toggle-marker,
&:checked[aria-disabled="true"] ~ %toggle-marker {
@include state-styles($toggle_states--switch--checked, disabled);
}
[data-invalid="false"] &:checked ~ %toggle-marker,
&[data-invalid="false"]:checked ~ %toggle-marker,
&--valid:checked ~ %toggle-marker {
@include state-styles($toggle_states--switch--checked, valid);
}
[data-invalid="true"] &:checked ~ %toggle-marker,
&:checked[data-invalid="true"] ~ %toggle-marker,
&--invalid:checked ~ %toggle-marker {
@include state-styles($toggle_states--switch--checked, invalid);
}
}
%toggle-marker {
@extend %toggle--switch-marker;
}
%toggle-input {
@extend %toggle--switch-input;
}
}
.toggle {
@extend %toggle;
&-input {
@extend %toggle-input;
}
&-marker {
@extend %toggle-marker;
}
&.is-checkbox {
@extend %toggle--checkbox;
}
&.is-radio {
@extend %toggle--radio;
}
&.is-switch {
@extend %toggle--switch;
}
}