AvanzaCast/shared/components/modal-parts/ModalRadioGroup.module.css
Cesar Mendivil e43686e36d feat(modal-parts): add modular components for modal UI
- Introduced ModalDestinationButton for destination selection with customizable icons and labels.
- Added ModalInput for text input with optional character counter.
- Implemented ModalLink for reusable links styled as underlined text.
- Created ModalPlatformCard for platform selection with badges.
- Developed ModalRadioGroup for radio button groups with custom styling.
- Added ModalSection for grouping modal content with optional labels.
- Implemented ModalSelect for dropdown selections with custom styling.
- Created ModalShareButtons for sharing options via Gmail, Email, and Messenger.
- Developed ModalTextarea for multi-line text input with character counter.
- Introduced ModalToggle for toggle switches with optional help text and links.
- Updated README.md with component descriptions, usage examples, and design guidelines.
- Added index.ts for centralized exports of modal components.
2025-11-06 00:32:08 -07:00

142 lines
2.1 KiB
CSS

/* ModalRadioGroup - StreamYard style radio buttons */
.container {
width: 100%;
}
.labelRow {
display: flex;
align-items: center;
gap: 4px;
margin-bottom: 12px;
}
.label {
color: #5f6368;
font-size: 14px;
font-weight: 400;
margin: 0;
}
.helpButton {
background: none;
border: none;
padding: 0;
margin: 0;
cursor: pointer;
color: #5f6368;
display: flex;
align-items: center;
justify-content: center;
width: 16px;
height: 16px;
transition: color 0.15s;
}
.helpButton:hover {
color: #202124;
}
.optionsContainer {
display: flex;
gap: 16px;
flex-wrap: wrap;
}
.option {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
user-select: none;
position: relative;
}
.radioInput {
position: absolute;
opacity: 0;
cursor: pointer;
height: 0;
width: 0;
}
.radioCustom {
width: 16px;
height: 16px;
border: 2px solid #5f6368;
border-radius: 50%;
position: relative;
flex-shrink: 0;
transition: border-color 0.15s;
}
.radioInput:checked ~ .radioCustom {
border-color: #1a73e8;
}
.radioInput:checked ~ .radioCustom::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 8px;
height: 8px;
border-radius: 50%;
background-color: #1a73e8;
}
.icon {
display: flex;
align-items: center;
color: #5f6368;
font-size: 14px;
}
.radioInput:checked ~ .icon {
color: #1a73e8;
}
.optionLabel {
color: #202124;
font-size: 14px;
font-weight: 400;
}
/* Dark mode */
[data-theme="dark"] .label {
color: #9aa0a6;
}
[data-theme="dark"] .helpButton {
color: #9aa0a6;
}
[data-theme="dark"] .helpButton:hover {
color: #e8eaed;
}
[data-theme="dark"] .radioCustom {
border-color: #9aa0a6;
}
[data-theme="dark"] .icon {
color: #9aa0a6;
}
[data-theme="dark"] .radioInput:checked ~ .icon {
color: #8ab4f8;
}
[data-theme="dark"] .optionLabel {
color: #e8eaed;
}
[data-theme="dark"] .radioInput:checked ~ .radioCustom {
border-color: #8ab4f8;
}
[data-theme="dark"] .radioInput:checked ~ .radioCustom::after {
background-color: #8ab4f8;
}