features/rewrite/modal1 #10
Merged
koma
merged 18 commits from features/rewrite/modal1
into features/rewrite/main
2 years ago
@ -1,5 +1,7 @@
|
|||||||
@inherits LayoutComponentBase
|
@inherits LayoutComponentBase
|
||||||
|
|
||||||
|
<ModalDialog/>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
@Body
|
@Body
|
||||||
</main>
|
</main>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,44 +1,9 @@
|
|||||||
<button
|
<button type="button"
|
||||||
type="button"
|
@onclick="@OnClick"
|
||||||
href="#"
|
disabled=@Disabled
|
||||||
@onclick="@OnClick"
|
style="@StyleList"
|
||||||
disabled=@Disabled
|
class="@ClassList">
|
||||||
style="@Style"
|
|
||||||
class="@ClassList">
|
|
||||||
<div class="@ContentClassList">
|
<div class="@ContentClassList">
|
||||||
@if (!string.IsNullOrEmpty(Glyph))
|
|
||||||
{
|
|
||||||
@if (GlyphPosition == Position.Top || GlyphPosition == Position.Bottom)
|
|
||||||
{
|
|
||||||
<div style="align-items:center">
|
|
||||||
@if (GlyphPosition == Position.Top)
|
|
||||||
{
|
|
||||||
<Glyph SVG="@Glyph" Color="@GlyphColor"/>
|
|
||||||
}
|
|
||||||
@ChildContent
|
|
||||||
@if (GlyphPosition == Position.Bottom)
|
|
||||||
{
|
|
||||||
<Glyph SVG="@Glyph" Color="@GlyphColor"/>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@if (GlyphPosition == Position.Left || GlyphPosition == Position.Right)
|
|
||||||
{
|
|
||||||
<div style="display:flex; align-items:center">
|
|
||||||
@if (GlyphPosition == Position.Left)
|
|
||||||
{
|
|
||||||
<Glyph SVG="@Glyph" Color="@GlyphColor" Class="m-1" />
|
|
||||||
}
|
|
||||||
@ChildContent
|
|
||||||
@if (GlyphPosition == Position.Right)
|
|
||||||
{
|
|
||||||
<Glyph SVG="@Glyph" Color="@GlyphColor" Class="m-1" />
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
@ChildContent
|
@ChildContent
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
@using Connected.Models;
|
|
||||||
|
|
||||||
@inherits InputBase;
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="container">
|
|
||||||
@ChildContent
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -0,0 +1,46 @@
|
|||||||
|
@inherits Button
|
||||||
|
|
||||||
|
<button type="button"
|
||||||
|
href="#"
|
||||||
|
@onclick="@OnClick"
|
||||||
|
disabled=@Disabled
|
||||||
|
style="@StyleList"
|
||||||
|
class="@ClassList">
|
||||||
|
<div class="@ContentClassList">
|
||||||
|
@if (!string.IsNullOrEmpty(Glyph))
|
||||||
|
{
|
||||||
|
@if (GlyphPosition == Position.Top || GlyphPosition == Position.Bottom)
|
||||||
|
{
|
||||||
|
<div style="align-items:center">
|
||||||
|
@if (GlyphPosition == Position.Top)
|
||||||
|
{
|
||||||
|
<Glyph SVG="@Glyph" Color="@GlyphColor" />
|
||||||
|
}
|
||||||
|
@ChildContent
|
||||||
|
@if (GlyphPosition == Position.Bottom)
|
||||||
|
{
|
||||||
|
<Glyph SVG="@Glyph" Color="@GlyphColor" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
@if (GlyphPosition == Position.Left || GlyphPosition == Position.Right)
|
||||||
|
{
|
||||||
|
<div style="display:flex; align-items:center">
|
||||||
|
@if (GlyphPosition == Position.Left)
|
||||||
|
{
|
||||||
|
<Glyph SVG="@Glyph" Color="@GlyphColor" Class="m-1" />
|
||||||
|
}
|
||||||
|
@ChildContent
|
||||||
|
@if (GlyphPosition == Position.Right)
|
||||||
|
{
|
||||||
|
<Glyph SVG="@Glyph" Color="@GlyphColor" Class="m-1" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@ChildContent
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</button>
|
@ -1,7 +1,6 @@
|
|||||||
<a
|
<a class="@LinkClassList"
|
||||||
class="@LinkClassList"
|
style="@LinkStyleList"
|
||||||
style="@LinkStyleList"
|
href="@Url"
|
||||||
href="@Url"
|
target="@_target">
|
||||||
target="@Target" >
|
|
||||||
@Text
|
@Text
|
||||||
</a>
|
</a>
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
@using Connected.Models.Modal;
|
||||||
|
@if (IsVisible)
|
||||||
|
{
|
||||||
|
<div class="modal fade show" @onclick="@CloseIfEnabled" @onkeydown="@(e => CheckEscape(e))" tabindex="-1" @ref="@root">
|
||||||
|
<div class="modal-dialog modal-dialog-scrollable modal-dialog-centered">
|
||||||
|
<div class="modal-content" @onclick="PreventClose">
|
||||||
|
@if (!ModalOptions.NoHeader)
|
||||||
|
{
|
||||||
|
<div class="modal-header">
|
||||||
|
<h3 class="modal-title">@Title</h3>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<div class="modal-body">
|
||||||
|
@Content
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
@foreach (ModalButton button in buttons)
|
||||||
|
{
|
||||||
|
<button type="button" class="btn @button.GetButtonClass" @onclick="@(()=>CloseModal(button))">@button.ButtonText</button>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
@ -0,0 +1,45 @@
|
|||||||
|
@using Connected.Models;
|
||||||
|
|
||||||
|
@inherits InputBase;
|
||||||
|
|
||||||
|
<div class="@InputFieldClassList">
|
||||||
|
<textarea value="@Value"
|
||||||
|
placeholder="@Placeholder"
|
||||||
|
disabled="@Disabled"
|
||||||
|
readonly="@Readonly"
|
||||||
|
required="@Required"
|
||||||
|
style="overflow-x: hidden; overflow-y: hidden;"
|
||||||
|
@oninput=@ChangeValueAsync
|
||||||
|
@attributes="@InputAttributes" />
|
||||||
|
|
||||||
|
<span class="highlight"></span>
|
||||||
|
<span class="bar"></span>
|
||||||
|
@if (IsLabel)
|
||||||
|
{
|
||||||
|
<label class="label-animated">@Label</label>
|
||||||
|
}
|
||||||
|
@if (IsHelperText && !IsError)
|
||||||
|
{
|
||||||
|
<div class="input-helper-text">@HelperText</div>
|
||||||
|
}
|
||||||
|
@if (IsError)
|
||||||
|
{
|
||||||
|
<div class="input-error-text">@ErrorText</div>
|
||||||
|
}
|
||||||
|
<span class="input-glyph-wraper">
|
||||||
|
<span class="input-glyph">
|
||||||
|
@if (Clearable && !string.IsNullOrEmpty(Value))
|
||||||
|
{
|
||||||
|
<span class="input-glyph button" @onclick="Clear">
|
||||||
|
<Glyph SVG="@Icons.Material.Rounded.Dangerous" />
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
@if (IsError)
|
||||||
|
{
|
||||||
|
<span class="input-glyph error">
|
||||||
|
<Glyph SVG="@Icons.Material.Outlined.Error" />
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
@ -1,15 +1,13 @@
|
|||||||
@using Connected.Models;
|
@using Connected.Models;
|
||||||
|
|
||||||
@inherits InputBase;
|
|
||||||
|
|
||||||
<CascadingValue Value="this">
|
<CascadingValue Value="this">
|
||||||
<div>
|
<div>
|
||||||
@if (!string.IsNullOrEmpty(Name))
|
@if (!string.IsNullOrEmpty(Name))
|
||||||
{
|
{
|
||||||
<h5>@Name</h5>
|
<h5>@Name</h5>
|
||||||
}
|
}
|
||||||
<div class="container">
|
<div class="container">
|
||||||
@ChildContent
|
@ChildContent
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</CascadingValue>
|
</CascadingValue>
|
@ -0,0 +1,21 @@
|
|||||||
|
@inherits Button
|
||||||
|
|
||||||
|
<button type="button"
|
||||||
|
@onclick="@Clicked"
|
||||||
|
disabled=@Disabled
|
||||||
|
style="@StyleList"
|
||||||
|
class="@ClassList">
|
||||||
|
<div class="@ContentClassList">
|
||||||
|
<div style="align-items:center">
|
||||||
|
@if (GlyphPosition == Position.Top)
|
||||||
|
{
|
||||||
|
<Glyph SVG="@Glyph" Color="@GlyphColor" />
|
||||||
|
}
|
||||||
|
@ChildContent
|
||||||
|
@if (GlyphPosition == Position.Bottom)
|
||||||
|
{
|
||||||
|
<Glyph SVG="@Glyph" Color="@GlyphColor" />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</button>
|
@ -0,0 +1,17 @@
|
|||||||
|
@using Connected.Models;
|
||||||
|
|
||||||
|
@inherits InputBase;
|
||||||
|
|
||||||
|
<label class="toggle-group" for="@Id">
|
||||||
|
<input class="toggle-input"
|
||||||
|
type="checkbox"
|
||||||
|
name="toggle"
|
||||||
|
disabled="@Disabled"
|
||||||
|
id="@Id"
|
||||||
|
checked="@Checked"
|
||||||
|
@onchange="@OnChange"
|
||||||
|
@attributes=@InputAttributes>
|
||||||
|
|
||||||
|
<div class="toggle-fill"></div>
|
||||||
|
<label for="@Id" class="toggle-label">@Label</label>
|
||||||
|
</label>
|
@ -1,102 +1,188 @@
|
|||||||
$color3: #f4f4f4;
|
$checkbox-primary-color: var(--bg-core-primary-darken);
|
||||||
$color4: var(--bg-core-primary-darken);
|
$checkbox-secondary-color: #f4f4f4;
|
||||||
|
$checkbox-disabled-color: darken($checkbox-secondary-color, 25%);
|
||||||
|
|
||||||
.checkbox-group {
|
.checkbox-group {
|
||||||
margin: 0.5rem;
|
--width: 1.25rem;
|
||||||
position:relative;
|
--height: var(--width);
|
||||||
input[type="checkbox"] {
|
--inset: calc(var(--width) / 10);
|
||||||
position: absolute;
|
|
||||||
opacity: 0;
|
|
||||||
+ .checkbox-label {
|
|
||||||
&:before {
|
|
||||||
content: "";
|
|
||||||
background: transparent;
|
|
||||||
border-radius: 0%;
|
|
||||||
border: 2px solid $color4;
|
|
||||||
display: inline-block;
|
|
||||||
width: 1.25em;
|
|
||||||
height: 1.25em;
|
|
||||||
position: relative;
|
|
||||||
top: .15rem;
|
|
||||||
margin-right: .75em;
|
|
||||||
vertical-align: top;
|
|
||||||
cursor: pointer;
|
|
||||||
text-align: center;
|
|
||||||
z-index: 1;
|
|
||||||
transition: all 250ms ease;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:checked {
|
|
||||||
+ .checkbox-label {
|
|
||||||
&:before {
|
|
||||||
background-color: $color4;
|
|
||||||
box-shadow: inset 0 0 0 2px $color3;
|
|
||||||
|
|
||||||
|
|
||||||
|
margin: 0.75rem 0;
|
||||||
|
width: max-content;
|
||||||
|
cursor: pointer;
|
||||||
|
position:relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap:.75rem;
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
|
&.reversed{
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
& :nth-child(1) {order:2;}
|
||||||
|
& :nth-child(2) {order:1;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.column{
|
||||||
|
flex-direction: column;
|
||||||
|
gap:.25rem;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// &:checked {
|
input[type="checkbox"] {
|
||||||
// + .checkbox-label {
|
position: absolute;
|
||||||
// &:after {
|
opacity: 0;
|
||||||
// background: $color3;
|
|
||||||
// z-index: 1;
|
|
||||||
// opacity: 1;
|
|
||||||
// scale: 0.25;
|
|
||||||
// clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
|
|
||||||
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
&:focus {
|
|
||||||
+ .checkbox-label {
|
|
||||||
&:before {
|
|
||||||
outline: none;
|
|
||||||
border-color: $color4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:disabled {
|
|
||||||
+ .checkbox-label {
|
|
||||||
color: darken($color3, 25%);
|
|
||||||
pointer-events: none;
|
|
||||||
&:before {
|
|
||||||
box-shadow: inset 0 0 0 2px $color3;
|
|
||||||
border-color: darken($color3, 25%);
|
|
||||||
background: darken($color3, 25%);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ .checkbox-label {
|
|
||||||
&:empty {
|
|
||||||
&:before {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
.checkbox-fill {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--width);
|
||||||
|
height: var(--height);
|
||||||
|
background: transperent;
|
||||||
|
border: 2px solid $checkbox-primary-color;
|
||||||
|
transition: background 0.2s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.checkbox-input:checked ~ .checkbox-fill {
|
||||||
|
background: var(--bg-core-primary-darken);
|
||||||
|
box-shadow: inset 0 0 0 var(--inset) $checkbox-secondary-color;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-input:focus-within ~ .checkbox-fill {
|
||||||
|
outline: 1px solid $checkbox-primary-color;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.checkbox-input:disabled ~ .checkbox-fill {
|
||||||
|
box-shadow: inset 0 0 0 var(--inset) $checkbox-secondary-color;
|
||||||
|
border-color: $checkbox-disabled-color;
|
||||||
|
background: $checkbox-disabled-color;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-input:disabled ~ .checkbox-label {
|
||||||
|
color: $checkbox-disabled-color;
|
||||||
|
}
|
||||||
|
|
||||||
.checkbox-label:after {
|
|
||||||
content: "";
|
|
||||||
display: inline-block;
|
|
||||||
width: 35px;
|
|
||||||
height: 35px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background-color: transparent;
|
|
||||||
position: absolute;
|
|
||||||
left: -8px;
|
|
||||||
top: -6px;
|
|
||||||
scale: .75;
|
|
||||||
transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.checkbox-fill::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: calc(var(--width) * 1.8);
|
||||||
|
height: calc(var(--width) * 1.8);
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: transparent;
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
scale: .75;
|
||||||
|
transform-origin: left top;
|
||||||
|
transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25), transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checkbox-fill:hover::before {
|
||||||
|
background: var(--bg-core-primary-lighten);
|
||||||
|
scale: 1;
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// $checkbox-primary-color: var(--bg-core-primary-darken);
|
||||||
|
// $checkbox-secondary-color: #f4f4f4;
|
||||||
|
// $checkbox-disabled-color: darken($checkbox-secondary-color, 25%);
|
||||||
|
|
||||||
|
// .checkbox-group {
|
||||||
|
// margin: 0.5rem;
|
||||||
|
// position:relative;
|
||||||
|
|
||||||
|
// input[type="checkbox"] {
|
||||||
|
// position: absolute;
|
||||||
|
// opacity: 0;
|
||||||
|
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:before {
|
||||||
|
// content: "";
|
||||||
|
// background: transparent;
|
||||||
|
// border: 2px solid $checkbox-primary-color;
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 1.25em;
|
||||||
|
// height: 1.25em;
|
||||||
|
// position: relative;
|
||||||
|
// top: .15rem;
|
||||||
|
// margin-right: .75em;
|
||||||
|
// vertical-align: top;
|
||||||
|
// cursor: pointer;
|
||||||
|
// text-align: center;
|
||||||
|
// z-index: 1;
|
||||||
|
// transition: all 250ms ease;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:checked {
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:before {
|
||||||
|
// background-color: $checkbox-primary-color;
|
||||||
|
// box-shadow: inset 0 0 0 2px $checkbox-secondary-color;
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:focus {
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:before {
|
||||||
|
// outline: 1px solid $checkbox-primary-color;
|
||||||
|
// border-color: $checkbox-primary-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:disabled {
|
||||||
|
// + .checkbox-label {
|
||||||
|
// color: darken($checkbox-secondary-color, 25%);
|
||||||
|
// pointer-events: none;
|
||||||
|
// &:before {
|
||||||
|
// box-shadow: inset 0 0 0 2px $checkbox-secondary-color;
|
||||||
|
// border-color: $checkbox-disabled-color;
|
||||||
|
// background: $checkbox-disabled-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:empty {
|
||||||
|
// &:before {
|
||||||
|
// margin-right: 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .checkbox-label:after {
|
||||||
|
// content: "";
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 35px;
|
||||||
|
// height: 35px;
|
||||||
|
// border-radius: 50%;
|
||||||
|
// background-color: transparent;
|
||||||
|
// position: absolute;
|
||||||
|
// left: -8px;
|
||||||
|
// top: -6px;
|
||||||
|
// scale: .75;
|
||||||
|
// transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
||||||
|
// }
|
||||||
|
|
||||||
.checkbox-label:hover:after {
|
// .checkbox-label:hover:after {
|
||||||
background: var(--bg-core-primary-lighten);
|
// background: var(--bg-core-primary-lighten);
|
||||||
scale: 1;
|
// scale: 1;
|
||||||
opacity: .5;
|
// opacity: .5;
|
||||||
}
|
// }
|
@ -0,0 +1,218 @@
|
|||||||
|
@use "../util" as *;
|
||||||
|
@use "../globals" as *;
|
||||||
|
|
||||||
|
/*CHIP*/
|
||||||
|
/* scroll container */
|
||||||
|
.horizontal-scroll-container {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: .5rem;
|
||||||
|
overflow: auto;
|
||||||
|
scroll-snap-type: both mandatory;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide scrollbar for Chrome, Safari and Opera */
|
||||||
|
.horizontal-scroll-container::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/* Hide scrollbar for IE, Edge and Firefox */
|
||||||
|
.horizontal-scroll-container {
|
||||||
|
-ms-overflow-style: none; /* IE and Edge */
|
||||||
|
scrollbar-width: none; /* Firefox */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.chip-icon {
|
||||||
|
--height: 2.5rem;
|
||||||
|
height: var(--height);
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
display: flex;
|
||||||
|
flex: 1 0 auto;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: var(--bg-core-primary-darken);
|
||||||
|
overflow: hidden;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-icon:hover,
|
||||||
|
.chip-icon:active,
|
||||||
|
.chip-icon:active {
|
||||||
|
background-color: var(--bg-core-primary-dark);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-icon.float-left {
|
||||||
|
float: left;
|
||||||
|
margin: .05rem .5rem .15rem 0;
|
||||||
|
margin-top: -.25rem;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-group {
|
||||||
|
--height: 1.5rem;
|
||||||
|
|
||||||
|
border: 1px solid var(--bg-core-primary);
|
||||||
|
padding: .15rem;
|
||||||
|
min-width: max-content;
|
||||||
|
color: var(--text-core);
|
||||||
|
border-radius: $border-radius-pill;
|
||||||
|
background-color: var(--bg-core-primary-light);
|
||||||
|
display: inline-block;
|
||||||
|
position:relative;
|
||||||
|
scroll-snap-align: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-group-content{
|
||||||
|
height: var(--height);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-leading-icon {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: $border-radius-pill;
|
||||||
|
background-color: var(--bg-core-primary-light);
|
||||||
|
height: var(--height);
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-leading-icon img{
|
||||||
|
object-fit: cover;
|
||||||
|
height: var(--height);
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-cta-icon{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: $border-radius-pill;
|
||||||
|
background-color: transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
height: var(--height);
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
transition: all 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-label{
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
margin:0 .85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-cta-icon:hover{
|
||||||
|
background-color: var(--bg-core-primary-lighten);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*filter*/
|
||||||
|
.chip-group.filter {
|
||||||
|
border: 1px solid var(--bg-core-primary);
|
||||||
|
background-color: var(--bg-core-primary-light);
|
||||||
|
cursor: pointer;
|
||||||
|
overflow: hidden;
|
||||||
|
&:hover{
|
||||||
|
background-color: var(--bg-core-primary-lighten);
|
||||||
|
}
|
||||||
|
&:active,
|
||||||
|
&.active{
|
||||||
|
border: 1px solid var(--bg-core-primary);
|
||||||
|
background-color: var(--bg-core-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-group.filter .chip-leading-icon{
|
||||||
|
//display: none;
|
||||||
|
max-width: 0;
|
||||||
|
transform: translateX(calc(var(--height) * -1.25));
|
||||||
|
transition: all 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-group.filter.active .chip-leading-icon{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: $border-radius-pill;
|
||||||
|
background-color: var(--bg-core-primary-light);
|
||||||
|
height: var(--height);
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
transform: translateX(0);
|
||||||
|
max-width: var(--height);
|
||||||
|
}
|
||||||
|
|
||||||
|
.chip-group.select .chip-cta-icon{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
/*end select*/
|
||||||
|
|
||||||
|
/*drop-down*/
|
||||||
|
/* The container must be positioned relative: */
|
||||||
|
.custom-select {
|
||||||
|
position: relative;
|
||||||
|
font-family: Arial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select select {
|
||||||
|
display: none; /*hide original SELECT element: */
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-selected {
|
||||||
|
background-color: DodgerBlue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style the arrow inside the select element: */
|
||||||
|
.select-selected:after {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
top: 14px;
|
||||||
|
right: 10px;
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border: 6px solid transparent;
|
||||||
|
border-color: #fff transparent transparent transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Point the arrow upwards when the select box is open (active): */
|
||||||
|
.select-selected.select-arrow-active:after {
|
||||||
|
border-color: transparent transparent #fff transparent;
|
||||||
|
top: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* style the items (options), including the selected item: */
|
||||||
|
.select-items div,.select-selected {
|
||||||
|
color: #ffffff;
|
||||||
|
padding: 8px 16px;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
border-color: transparent transparent rgba(0, 0, 0, 0.1) transparent;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Style items (options): */
|
||||||
|
.select-items {
|
||||||
|
position: absolute;
|
||||||
|
background-color: DodgerBlue;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide the items when the select box is closed: */
|
||||||
|
.select-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-items div:hover, .same-as-selected {
|
||||||
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
/*end-down*/
|
||||||
|
|
||||||
|
/*END CHIP*/
|
@ -0,0 +1,229 @@
|
|||||||
|
@use "../util" as *;
|
||||||
|
@use "../globals" as *;
|
||||||
|
|
||||||
|
// stylelint-disable function-disallowed-list
|
||||||
|
|
||||||
|
// .modal-open - body class for killing the scroll
|
||||||
|
.scroll-disabled{
|
||||||
|
overflow: hidden;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
// .modal - container to scroll within
|
||||||
|
// .modal-dialog - positioning shell for the actual modal
|
||||||
|
// .modal-content - actual modal w/ bg and corners and stuff
|
||||||
|
|
||||||
|
|
||||||
|
// Container that the modal scrolls within
|
||||||
|
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
--modal-zindex: #{$modal-zindex};
|
||||||
|
--modal-width: 60vw;
|
||||||
|
--modal-height: 50vh;
|
||||||
|
--modal-padding: 1.5rem;
|
||||||
|
--modal-margin: 1.5rem;
|
||||||
|
--modal-color: var(--text-core);
|
||||||
|
--modal-bg: var(--bg-core-primary-light);
|
||||||
|
--modal-border-color: var(--bg-core-primary-light);
|
||||||
|
--modal-border-width: 1px;
|
||||||
|
--modal-border-radius: 1rem;
|
||||||
|
--modal-box-shadow: 0 0.5rem 1rem rgba(var(--bg-core-primary), 0.15);
|
||||||
|
|
||||||
|
--modal-header-padding-x: 1.5rem; //close button
|
||||||
|
--modal-header-padding-y: 1.5rem; //close button
|
||||||
|
--modal-header-bg: var(--modal-bg);
|
||||||
|
--modal-header-padding: 1.5rem;
|
||||||
|
--modal-header-border-color: var(--bg-core-primary-light);
|
||||||
|
--modal-header-border-width: 1px;
|
||||||
|
|
||||||
|
--modal-footer-bg: var(--modal-bg);
|
||||||
|
--modal-footer-padding: 1.5rem;
|
||||||
|
--modal-footer-border-color: var(--bg-core-primary-light);
|
||||||
|
--modal-footer-border-width: 1px;
|
||||||
|
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background-color: rgba(0,0,0,.65);
|
||||||
|
z-index: var(--modal-zindex);
|
||||||
|
display: none;
|
||||||
|
opacity: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow-x: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
transition: opacity .15s linear;
|
||||||
|
// Prevent Chrome on Windows from adding a focus outline. For details, see
|
||||||
|
// https://github.com/twbs/bootstrap/pull/10951.
|
||||||
|
outline: 0;
|
||||||
|
// We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a
|
||||||
|
// gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342
|
||||||
|
// See also https://github.com/twbs/bootstrap/issues/17695
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// When fading in the modal, animate it to slide down
|
||||||
|
.modal.fade {
|
||||||
|
opacity: 1;
|
||||||
|
transition: opacity .15s linear;
|
||||||
|
}
|
||||||
|
.modal.show{
|
||||||
|
display: block;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// When trying to close, animate focus to scale
|
||||||
|
.modal.modal-static {
|
||||||
|
transform:scale(1.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Shell div to position the modal with bottom padding
|
||||||
|
.modal-dialog {
|
||||||
|
position: relative;
|
||||||
|
width: auto;
|
||||||
|
margin: var(--modal-margin);
|
||||||
|
// allow clicks to pass through for custom click handling to close modal
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-dialog-scrollable {
|
||||||
|
height: calc(100% - var(--modal-margin) * 2);
|
||||||
|
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
max-height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body {
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-dialog-centered {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-height: calc(100% - var(--modal-margin) * 2);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actual modal
|
||||||
|
.modal-content {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
|
||||||
|
// counteract the pointer-events: none; in the .modal-dialog
|
||||||
|
color: var(--modal-color);
|
||||||
|
pointer-events: auto;
|
||||||
|
background-color: var(--modal-bg);
|
||||||
|
background-clip: padding-box;
|
||||||
|
border: var(--modal-border-width) solid var(--modal-border-color);
|
||||||
|
border-radius: var(--modal-border-radius);
|
||||||
|
box-shadow: var(--modal-box-shadow);
|
||||||
|
// Remove focus outline from opened modal
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Modal header
|
||||||
|
// Top section of the modal w/ title and dismiss
|
||||||
|
.modal-header {
|
||||||
|
display: flex;
|
||||||
|
flex-shrink: 0;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
|
||||||
|
padding: var(--modal-header-padding);
|
||||||
|
background-color: var(--modal-header-bg);
|
||||||
|
border-bottom: var(--modal-header-border-width) solid var(--modal-header-border-color);
|
||||||
|
|
||||||
|
|
||||||
|
.btn-close {
|
||||||
|
padding: calc(var(--modal-header-padding-y) * .5) calc(var(--modal-header-padding-x) * .5);
|
||||||
|
margin: calc(-.5 * var(--modal-header-padding-y)) calc(-.5 * var(--modal-header-padding-x)) calc(-.5 * var(--modal-header-padding-y)) auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Title text within header
|
||||||
|
.modal-title {
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modal body
|
||||||
|
// Where all modal content resides (sibling of .modal-header and .modal-footer)
|
||||||
|
.modal-body {
|
||||||
|
position: relative;
|
||||||
|
// Enable `flex-grow: 1` so that the body take up as much space as possible
|
||||||
|
// when there should be a fixed height on `.modal-dialog`.
|
||||||
|
flex: 1 1 auto;
|
||||||
|
padding: var(--modal-padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Footer (for actions)
|
||||||
|
.modal-footer {
|
||||||
|
display: flex;
|
||||||
|
flex-shrink: 0;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center; // vertically center
|
||||||
|
justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items
|
||||||
|
padding: var(--modal-footer-padding);
|
||||||
|
background-color: var(--modal-footer-bg);
|
||||||
|
border-radius: var(--modal-border-radius);
|
||||||
|
gap: .5rem;
|
||||||
|
|
||||||
|
}
|
||||||
|
// Automatically set modal's width for larger viewports
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.modal-dialog {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 100%;
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
|
||||||
|
@include breakpoint(sm) {
|
||||||
|
max-width: 75vw;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
padding: var(--modal-padding);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(lg) {
|
||||||
|
max-width: var(--modal-width);
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// // Modal background
|
||||||
|
// .modal-backdrop {
|
||||||
|
// opacity: 0;
|
||||||
|
// display: none;
|
||||||
|
// position: fixed;
|
||||||
|
// top: 0;
|
||||||
|
// left: 0;
|
||||||
|
// z-index: #{$backdrop-zindex};
|
||||||
|
// width: 100vw;
|
||||||
|
// height: 100vh;
|
||||||
|
// background-color: #000;
|
||||||
|
// transition: opacity .15s linear;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .modal-backdrop.fade {
|
||||||
|
// opacity: .5;
|
||||||
|
// transition: opacity .15s linear;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .modal-backdrop.show {
|
||||||
|
// display: block;
|
||||||
|
// }
|
||||||
|
|
@ -1,86 +1,276 @@
|
|||||||
$color1: #f4f4f4;
|
$radio-primary-color: var(--bg-core-primary-darken);
|
||||||
$color2: var(--bg-core-primary-darken);
|
$radio-secondary-color: #f4f4f4;
|
||||||
|
$radio-disabled-color: darken($radio-secondary-color, 25%);
|
||||||
|
|
||||||
.radio-group {
|
.radio-group {
|
||||||
margin: 0.5rem;
|
--width: 1.25rem;
|
||||||
position:relative;
|
--height: var(--width);
|
||||||
input[type="radio"] {
|
--inset: calc(var(--width) / 10);
|
||||||
position: absolute;
|
|
||||||
opacity: 0;
|
margin: 0.75rem 0;
|
||||||
+ .radio-label {
|
width: max-content;
|
||||||
&:before {
|
cursor: pointer;
|
||||||
content: "";
|
position:relative;
|
||||||
background: $color1;
|
display: flex;
|
||||||
border-radius: 100%;
|
align-items: center;
|
||||||
border: 2px solid $color2;
|
gap:.75rem;
|
||||||
display: inline-block;
|
z-index: 1;
|
||||||
width: 1.25em;
|
|
||||||
height: 1.25em;
|
&.reversed{
|
||||||
position: relative;
|
justify-content: space-between;
|
||||||
top: .15rem;
|
width: 100%;
|
||||||
margin-right: .75em;
|
|
||||||
vertical-align: top;
|
& :nth-child(1) {order:2;}
|
||||||
cursor: pointer;
|
& :nth-child(2) {order:1;}
|
||||||
text-align: center;
|
|
||||||
z-index: 1;
|
|
||||||
transition: all 250ms ease;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:checked {
|
|
||||||
+ .radio-label {
|
|
||||||
&:before {
|
|
||||||
background-color: $color2;
|
|
||||||
box-shadow: inset 0 0 0 2px $color1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:focus {
|
|
||||||
+ .radio-label {
|
|
||||||
&:before {
|
|
||||||
outline: none;
|
|
||||||
border-color: $color2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&:disabled {
|
|
||||||
+ .radio-label {
|
|
||||||
color: darken($color1, 25%);
|
|
||||||
pointer-events: none;
|
|
||||||
&:before {
|
|
||||||
box-shadow: inset 0 0 0 2px $color1;
|
|
||||||
border-color: darken($color1, 25%);
|
|
||||||
background: darken($color1, 25%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.column{
|
||||||
|
flex-direction: column;
|
||||||
|
gap:.25rem;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
+ .radio-label {
|
input[type="radio"] {
|
||||||
&:empty {
|
position: absolute;
|
||||||
&:before {
|
opacity: 0;
|
||||||
margin-right: 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
.radio-fill {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
width: var(--width);
|
||||||
|
height: var(--height);
|
||||||
|
border-radius: 50%;
|
||||||
|
background: transperent;
|
||||||
|
border: 2px solid $radio-primary-color;
|
||||||
|
transition: background 0.2s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.radio-input:checked ~ .radio-fill {
|
||||||
|
background: var(--bg-core-primary-darken);
|
||||||
|
box-shadow: inset 0 0 0 var(--inset) $radio-secondary-color;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.radio-input:focus-within ~ .radio-fill {
|
||||||
|
outline: 1px solid $radio-primary-color;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-input:disabled ~ .radio-fill {
|
||||||
|
box-shadow: inset 0 0 0 var(--inset) $radio-secondary-color;
|
||||||
|
border-color: $radio-disabled-color;
|
||||||
|
background: $radio-disabled-color;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.radio-label:after {
|
.radio-input:disabled ~ .radio-label {
|
||||||
content: "";
|
color: $radio-disabled-color;
|
||||||
display: inline-block;
|
}
|
||||||
width: 35px;
|
|
||||||
height: 35px;
|
|
||||||
border-radius: 50%;
|
|
||||||
background-color: transparent;
|
|
||||||
position: absolute;
|
.radio-fill::before {
|
||||||
left: -8px;
|
content: "";
|
||||||
top: -6px;
|
display: inline-block;
|
||||||
scale: .75;
|
width: calc(var(--width) * 1.8);
|
||||||
transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
height: calc(var(--width) * 1.8);
|
||||||
}
|
border-radius: 50%;
|
||||||
|
background-color: transparent;
|
||||||
|
position: absolute;
|
||||||
|
z-index: -1;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
scale: .75;
|
||||||
|
transform-origin: left top;
|
||||||
|
transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25), transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-fill:hover::before {
|
||||||
|
background: var(--bg-core-primary-lighten);
|
||||||
|
scale: 1;
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// $checkbox-primary-color: var(--bg-core-primary-darken);
|
||||||
|
// $checkbox-secondary-color: #f4f4f4;
|
||||||
|
// $checkbox-disabled-color: darken($checkbox-secondary-color, 25%);
|
||||||
|
|
||||||
|
// .checkbox-group {
|
||||||
|
// margin: 0.5rem;
|
||||||
|
// position:relative;
|
||||||
|
|
||||||
|
// input[type="checkbox"] {
|
||||||
|
// position: absolute;
|
||||||
|
// opacity: 0;
|
||||||
|
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:before {
|
||||||
|
// content: "";
|
||||||
|
// background: transparent;
|
||||||
|
// border: 2px solid $checkbox-primary-color;
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 1.25em;
|
||||||
|
// height: 1.25em;
|
||||||
|
// position: relative;
|
||||||
|
// top: .15rem;
|
||||||
|
// margin-right: .75em;
|
||||||
|
// vertical-align: top;
|
||||||
|
// cursor: pointer;
|
||||||
|
// text-align: center;
|
||||||
|
// z-index: 1;
|
||||||
|
// transition: all 250ms ease;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:checked {
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:before {
|
||||||
|
// background-color: $checkbox-primary-color;
|
||||||
|
// box-shadow: inset 0 0 0 2px $checkbox-secondary-color;
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:focus {
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:before {
|
||||||
|
// outline: 1px solid $checkbox-primary-color;
|
||||||
|
// border-color: $checkbox-primary-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:disabled {
|
||||||
|
// + .checkbox-label {
|
||||||
|
// color: darken($checkbox-secondary-color, 25%);
|
||||||
|
// pointer-events: none;
|
||||||
|
// &:before {
|
||||||
|
// box-shadow: inset 0 0 0 2px $checkbox-secondary-color;
|
||||||
|
// border-color: $checkbox-disabled-color;
|
||||||
|
// background: $checkbox-disabled-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// + .checkbox-label {
|
||||||
|
// &:empty {
|
||||||
|
// &:before {
|
||||||
|
// margin-right: 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .checkbox-label:after {
|
||||||
|
// content: "";
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 35px;
|
||||||
|
// height: 35px;
|
||||||
|
// border-radius: 50%;
|
||||||
|
// background-color: transparent;
|
||||||
|
// position: absolute;
|
||||||
|
// left: -8px;
|
||||||
|
// top: -6px;
|
||||||
|
// scale: .75;
|
||||||
|
// transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .checkbox-label:hover:after {
|
||||||
|
// background: var(--bg-core-primary-lighten);
|
||||||
|
// scale: 1;
|
||||||
|
// opacity: .5;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
// $radio-primary-color: var(--bg-core-primary-darken);
|
||||||
|
// $radio-secondary-color: #f4f4f4;
|
||||||
|
// $radio-disabled-color: darken($radio-secondary-color, 25%);
|
||||||
|
|
||||||
|
// .radio-group {
|
||||||
|
// margin: 0.5rem;
|
||||||
|
// position:relative;
|
||||||
|
|
||||||
|
// input[type="radio"] {
|
||||||
|
// position: absolute;
|
||||||
|
// opacity: 0;
|
||||||
|
|
||||||
|
// + .radio-label {
|
||||||
|
// &:before {
|
||||||
|
// content: "";
|
||||||
|
// background: transparent;
|
||||||
|
// border-radius: 50%;
|
||||||
|
// border: 2px solid $radio-primary-color;
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 1.25em;
|
||||||
|
// height: 1.25em;
|
||||||
|
// position: relative;
|
||||||
|
// top: .15rem;
|
||||||
|
// margin-right: .75em;
|
||||||
|
// vertical-align: top;
|
||||||
|
// cursor: pointer;
|
||||||
|
// text-align: center;
|
||||||
|
// z-index: 1;
|
||||||
|
// transition: all 250ms ease;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:checked {
|
||||||
|
// + .radio-label {
|
||||||
|
// &:before {
|
||||||
|
// background-color: $radio-primary-color;
|
||||||
|
// box-shadow: inset 0 0 0 2px $radio-secondary-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:focus {
|
||||||
|
// + .radio-label {
|
||||||
|
// &:before {
|
||||||
|
// outline: 1px solid $radio-primary-color;
|
||||||
|
// border-color: $radio-primary-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// &:disabled {
|
||||||
|
// + .radio-label {
|
||||||
|
// color: darken($radio-secondary-color, 25%);
|
||||||
|
// pointer-events: none;
|
||||||
|
// &:before {
|
||||||
|
// box-shadow: inset 0 0 0 2px $radio-secondary-color;
|
||||||
|
// border-color: $radio-disabled-color;
|
||||||
|
// background: $radio-disabled-color;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// + .radio-label {
|
||||||
|
// &:empty {
|
||||||
|
// &:before {
|
||||||
|
// margin-right: 0;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .radio-label:after {
|
||||||
|
// content: "";
|
||||||
|
// display: inline-block;
|
||||||
|
// width: 35px;
|
||||||
|
// height: 35px;
|
||||||
|
// border-radius: 50%;
|
||||||
|
// background-color: transparent;
|
||||||
|
// position: absolute;
|
||||||
|
// left: -8px;
|
||||||
|
// top: -6px;
|
||||||
|
// scale: .75;
|
||||||
|
// transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .radio-label:hover:after {
|
||||||
|
// background: var(--bg-core-primary-lighten);
|
||||||
|
// scale: 1;
|
||||||
|
// opacity: .5;
|
||||||
|
// }
|
||||||
|
|
||||||
.radio-label:hover:after {
|
|
||||||
background: var(--bg-core-primary-lighten);
|
|
||||||
scale: 1;
|
|
||||||
opacity: .5;
|
|
||||||
}
|
|
@ -0,0 +1,107 @@
|
|||||||
|
@use "../globals/" as *;
|
||||||
|
@use "../util/" as *;
|
||||||
|
|
||||||
|
$toggle-primary-color: var(--bg-core-primary-darken);
|
||||||
|
$toggle-secondary-color: #ddd;
|
||||||
|
$toggle-disabled-color: darken($toggle-secondary-color, 25%);
|
||||||
|
|
||||||
|
.toggle-group {
|
||||||
|
--width: 42px;
|
||||||
|
--height: calc(var(--width) / 2);
|
||||||
|
--border-radius: calc(var(--height) / 2);
|
||||||
|
|
||||||
|
margin: 0.75rem 0;
|
||||||
|
width: max-content;
|
||||||
|
cursor: pointer;
|
||||||
|
position:relative;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap:.75rem;
|
||||||
|
|
||||||
|
&.reversed{
|
||||||
|
justify-content: space-between;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
& :nth-child(1) {order:2;}
|
||||||
|
& :nth-child(2) {order:1;}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.column{
|
||||||
|
flex-direction: column;
|
||||||
|
gap:.25rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="checkbox"] {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-fill {
|
||||||
|
position: relative;
|
||||||
|
width: var(--width);
|
||||||
|
height: var(--height);
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
background: $toggle-secondary-color;
|
||||||
|
//margin-right: .75rem;
|
||||||
|
transition: background 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-input:checked ~ .toggle-fill {
|
||||||
|
background: var(--bg-core-primary-darken);
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-input:focus-within ~ .toggle-fill {
|
||||||
|
outline: 1px solid $toggle-primary-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-input:disabled ~ .toggle-fill {
|
||||||
|
background: $toggle-disabled-color;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-input:disabled ~ .toggle-label {
|
||||||
|
color: $toggle-disabled-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-fill::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
left: 2px;
|
||||||
|
height: calc(var(--height) - 4px);
|
||||||
|
width: calc(var(--height) - 4px);
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: var(--border-radius);
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-input:checked ~ .toggle-fill::after {
|
||||||
|
transform: translateX(var(--height));
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-fill::before {
|
||||||
|
content: "";
|
||||||
|
display: inline-block;
|
||||||
|
width: calc(var(--height) * 1.8);
|
||||||
|
height: calc(var(--height) * 1.8);
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: transparent;
|
||||||
|
position: absolute;
|
||||||
|
left: calc(30% - var(--height));
|
||||||
|
top: calc(60% - var(--height));
|
||||||
|
scale: .75;
|
||||||
|
transform-origin: center;
|
||||||
|
transition: scale 0.35s cubic-bezier(0.6,-1.25,0.6,2.25), transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-fill:hover::before {
|
||||||
|
background: var(--bg-core-primary-lighten);
|
||||||
|
scale: 1;
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toggle-input:checked ~ .toggle-fill::before {
|
||||||
|
transform: translateX(var(--height));
|
||||||
|
}
|
Loading…
Reference in new issue