mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 06:14:59 +00:00
179 lines
4.4 KiB
SCSS
179 lines
4.4 KiB
SCSS
// ToggleButton Component - Material Design 3
|
|
// ===========================================
|
|
// Toggle button and group styling using M3 tokens
|
|
|
|
.toggle-btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-family: var(--mat-sys-label-large-font);
|
|
font-size: var(--mat-sys-label-large-size);
|
|
font-weight: var(--mat-sys-label-large-weight);
|
|
text-transform: none;
|
|
border: 1px solid var(--mat-sys-outline);
|
|
background-color: transparent;
|
|
color: var(--mat-sys-on-surface);
|
|
cursor: pointer;
|
|
transition: background-color var(--mat-sys-motion-duration-short4) var(--mat-sys-motion-easing-standard),
|
|
border-color var(--mat-sys-motion-duration-short4) var(--mat-sys-motion-easing-standard),
|
|
color var(--mat-sys-motion-duration-short4) var(--mat-sys-motion-easing-standard);
|
|
|
|
&:hover:not(:disabled) {
|
|
background-color: color-mix(in srgb, var(--mat-sys-on-surface) 8%, transparent);
|
|
}
|
|
|
|
&:focus-visible {
|
|
outline: 2px solid var(--mat-sys-primary);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
&:disabled {
|
|
opacity: var(--disabled-content-opacity);
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
// Selected state
|
|
&--selected {
|
|
background-color: var(--mat-sys-secondary-container);
|
|
color: var(--mat-sys-on-secondary-container);
|
|
border-color: var(--mat-sys-secondary-container);
|
|
|
|
&:hover:not(:disabled) {
|
|
background-color: color-mix(in srgb, var(--mat-sys-on-secondary-container) 8%, var(--mat-sys-secondary-container));
|
|
}
|
|
}
|
|
|
|
// Size variants
|
|
&--small {
|
|
padding: 6px 12px;
|
|
font-size: var(--mat-sys-label-medium-size);
|
|
min-height: 32px;
|
|
}
|
|
|
|
&--medium {
|
|
padding: 10px 16px;
|
|
min-height: 40px;
|
|
}
|
|
|
|
&--large {
|
|
padding: 12px 20px;
|
|
font-size: var(--mat-sys-label-large-size);
|
|
min-height: 48px;
|
|
}
|
|
|
|
// Full width
|
|
&--full-width {
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
// Toggle Button Group
|
|
.toggle-btn-group {
|
|
display: inline-flex;
|
|
border-radius: var(--mat-sys-corner-full);
|
|
|
|
// Remove individual button borders and add group border
|
|
.toggle-btn {
|
|
border-radius: 0;
|
|
|
|
&:first-child {
|
|
border-top-left-radius: var(--mat-sys-corner-full);
|
|
border-bottom-left-radius: var(--mat-sys-corner-full);
|
|
}
|
|
|
|
&:last-child {
|
|
border-top-right-radius: var(--mat-sys-corner-full);
|
|
border-bottom-right-radius: var(--mat-sys-corner-full);
|
|
}
|
|
|
|
// Collapse borders between buttons
|
|
&:not(:first-child) {
|
|
margin-left: -1px;
|
|
}
|
|
|
|
// Ensure focused/selected buttons are above siblings
|
|
&:focus-visible,
|
|
&--selected {
|
|
z-index: 1;
|
|
}
|
|
}
|
|
|
|
// Vertical orientation
|
|
&--vertical {
|
|
flex-direction: column;
|
|
|
|
.toggle-btn {
|
|
&:first-child {
|
|
border-top-left-radius: var(--mat-sys-corner-full);
|
|
border-top-right-radius: var(--mat-sys-corner-full);
|
|
border-bottom-left-radius: 0;
|
|
}
|
|
|
|
&:last-child {
|
|
border-bottom-left-radius: var(--mat-sys-corner-full);
|
|
border-bottom-right-radius: var(--mat-sys-corner-full);
|
|
border-top-right-radius: 0;
|
|
}
|
|
|
|
&:not(:first-child) {
|
|
margin-left: 0;
|
|
margin-top: -1px;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Full width
|
|
&--full-width {
|
|
display: flex;
|
|
width: 100%;
|
|
|
|
.toggle-btn {
|
|
flex: 1;
|
|
}
|
|
}
|
|
|
|
// Color variants
|
|
&--primary {
|
|
.toggle-btn--selected {
|
|
background-color: var(--mat-sys-primary);
|
|
color: var(--mat-sys-on-primary);
|
|
border-color: var(--mat-sys-primary);
|
|
|
|
&:hover:not(:disabled) {
|
|
background-color: color-mix(in srgb, var(--mat-sys-on-primary) 8%, var(--mat-sys-primary));
|
|
}
|
|
}
|
|
}
|
|
|
|
&--secondary {
|
|
.toggle-btn--selected {
|
|
background-color: var(--mat-sys-secondary);
|
|
color: var(--mat-sys-on-secondary);
|
|
border-color: var(--mat-sys-secondary);
|
|
|
|
&:hover:not(:disabled) {
|
|
background-color: color-mix(in srgb, var(--mat-sys-on-secondary) 8%, var(--mat-sys-secondary));
|
|
}
|
|
}
|
|
}
|
|
|
|
&--tertiary {
|
|
.toggle-btn--selected {
|
|
background-color: var(--mat-sys-tertiary);
|
|
color: var(--mat-sys-on-tertiary);
|
|
border-color: var(--mat-sys-tertiary);
|
|
|
|
&:hover:not(:disabled) {
|
|
background-color: color-mix(in srgb, var(--mat-sys-on-tertiary) 8%, var(--mat-sys-tertiary));
|
|
}
|
|
}
|
|
}
|
|
|
|
&--standard {
|
|
// Standard uses subtle tonal selection
|
|
.toggle-btn--selected {
|
|
background-color: color-mix(in srgb, var(--mat-sys-on-surface) 8%, transparent);
|
|
}
|
|
}
|
|
}
|