Toggle

Component: Toggle

Implementation Notes

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"
      ]
    }
  ]
}

  • Content:
    @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;
            }
    
        }
    
    }
    
  • URL: /components/raw/toggle/_toggle.scss
  • Filesystem Path: components/02-elements/toggle/_toggle.scss
  • Size: 494 Bytes
  • Content:
    @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;
    
  • URL: /components/raw/toggle/_toggle.settings.psi.scss
  • Filesystem Path: components/02-elements/toggle/_toggle.settings.psi.scss
  • Size: 1.3 KB
  • Content:
    $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;
    
  • URL: /components/raw/toggle/_toggle.settings.scss
  • Filesystem Path: components/02-elements/toggle/_toggle.settings.scss
  • Size: 3.2 KB
  • Content:
    %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;
        }
    
    }
    
  • URL: /components/raw/toggle/_toggle.styles.scss
  • Filesystem Path: components/02-elements/toggle/_toggle.styles.scss
  • Size: 7.8 KB