@lovebowls/leagueelements
Version:
League Elements package for LoveBowls
479 lines (404 loc) • 11.3 kB
JavaScript
import { buttonStyles, modalStyles, formStyles, mobileStyles } from '../shared-styles.js';
export const BASE_STYLES = `
${buttonStyles}
${modalStyles}
${formStyles}
:host {
display: none;
position: fixed;
z-index: var(--le-z-index-modal, 1001);
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: var(--le-background-color-modal-overlay, rgba(0,0,0,0.4));
align-items: center;
justify-content: center;
}
:host([open][is-mobile="true"]) {
display: flex;
${mobileStyles}
}
:host([open]) {
display: flex;
}
/* Teams Manager Layout */
.teams-manager-content {
background: var(--le-background-color-panel, #fff);
border-radius: var(--le-border-radius-large, 8px);
max-width: 900px;
width: 90%;
max-height: 80vh;
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
display: flex;
flex-direction: column;
overflow: hidden;
margin: auto; /* Center the modal */
}
.teams-manager-content.mobile-view {
width: 95%;
max-width: 95%;
max-height: 90vh;
}
.teams-manager-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--le-padding-l, 1.5rem);
border-bottom: 1px solid var(--le-border-color-light, #eee);
background: var(--le-background-color-header, #f8f9fa);
}
.teams-manager-header h3 {
margin: 0;
color: var(--le-text-color-primary, #333);
font-size: var(--le-font-size-large, 1.25rem);
}
.teams-manager-body {
padding: var(--le-padding-l, 1.5rem);
flex: 1;
overflow: auto;
display: flex;
flex-direction: column;
gap: var(--le-padding-l, 1.5rem);
}
.teams-manager-footer {
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--le-padding-m, 1rem);
padding: var(--le-padding-l, 1.5rem);
border-top: 1px solid var(--le-border-color-light, #eee);
background: var(--le-background-color-footer, #f8f9fa);
}
.footer-options {
display: flex;
align-items: center;
}
.footer-buttons {
display: flex;
gap: var(--le-padding-m, 1rem);
justify-content: flex-end;
}
.checkbox-label {
display: flex;
align-items: center;
gap: var(--le-padding-s, 0.5rem);
cursor: pointer;
color: var(--le-text-color-primary, #333);
font-size: var(--le-font-size-base, 1rem);
user-select: none;
}
.checkbox-label input[type="checkbox"] {
margin: 0;
cursor: pointer;
}
/* Action Buttons */
.teams-action-buttons {
display: flex;
gap: var(--le-padding-m, 1rem);
flex-wrap: wrap;
}
.teams-action-buttons .button-shared {
min-width: 100px;
}
.teams-action-buttons.disabled {
pointer-events: none;
opacity: 0.5;
}
/* Teams List Panel */
.teams-list-panel {
border: 1px solid var(--le-border-color-medium, #ddd);
border-radius: var(--le-border-radius-standard, 4px);
background: var(--le-background-color-panel, #fff);
}
.teams-list-panel h4 {
margin: 0;
padding: var(--le-padding-m, 1rem);
background: var(--le-background-color-header, #f8f9fa);
border-bottom: 1px solid var(--le-border-color-light, #eee);
font-size: var(--le-font-size-base, 1rem);
color: var(--le-text-color-primary, #333);
}
.teams-list-panel.disabled {
pointer-events: none;
opacity: 0.6;
}
.teams-list-panel.disabled .team-list-item {
cursor: not-allowed;
}
.teams-list-container {
max-height: 200px;
overflow-y: auto;
}
.teams-list {
list-style: none;
margin: 0;
padding: 0;
}
.team-list-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--le-padding-m, 1rem);
border-bottom: 1px solid var(--le-border-color-light, #eee);
cursor: pointer;
transition: background-color 0.2s ease;
}
.team-list-item:hover {
background-color: var(--le-background-color-hover, #f5f5f5);
}
.team-list-item.selected {
background-color: var(--le-background-color-selected, #e3f2fd);
border-left: 3px solid var(--le-border-color-primary, #2196f3);
}
.team-list-item:last-child {
border-bottom: none;
}
.team-info {
display: flex;
align-items: center;
flex: 1;
}
.team-name {
font-weight: 500;
color: var(--le-text-color-primary, #333);
}
.team-source {
color: var(--le-text-color-secondary, #666);
font-style: italic;
margin-left: var(--le-padding-s, 0.5rem);
}
.team-actions {
display: flex;
gap: var(--le-padding-s, 0.5rem);
}
.team-actions .button-shared {
opacity: 0.8;
transition: opacity 0.2s ease;
}
.team-actions .button-shared:hover {
opacity: 1;
}
.no-teams-message {
padding: var(--le-padding-l, 1.5rem);
text-align: center;
color: var(--le-text-color-secondary, #666);
font-style: italic;
}
/* Team Editor Panel */
.team-editor-panel {
border: 1px solid var(--le-border-color-medium, #ddd);
border-radius: var(--le-border-radius-standard, 4px);
background: var(--le-background-color-panel, #fff);
animation: slideDown 0.3s ease-out;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.team-editor-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--le-padding-m, 1rem);
background: var(--le-background-color-header, #f8f9fa);
border-bottom: 1px solid var(--le-border-color-light, #eee);
}
.team-editor-header h4 {
margin: 0;
font-size: var(--le-font-size-base, 1rem);
color: var(--le-text-color-primary, #333);
}
.team-editor-body {
padding: var(--le-padding-l, 1.5rem);
}
.team-editor-footer {
display: flex;
justify-content: flex-end;
gap: var(--le-padding-m, 1rem);
padding: var(--le-padding-m, 1rem);
border-top: 1px solid var(--le-border-color-light, #eee);
background: var(--le-background-color-footer, #f8f9fa);
}
.modal-close-button {
background: none;
border: none;
font-size: 1.5rem;
cursor: pointer;
color: var(--le-text-color-secondary, #666);
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background-color 0.2s ease;
}
.modal-close-button:hover {
background-color: var(--le-background-color-button-hover, #e0e0e0);
color: var(--le-text-color-primary, #333);
}
/* Form styles */
.form-group-shared {
margin-bottom: var(--le-padding-m, 1rem);
}
.form-label-shared {
display: block;
margin-bottom: var(--le-padding-s, 0.5rem);
font-weight: bold;
color: var(--le-text-color-primary, #333);
}
.form-label-shared input[type="checkbox"] {
margin-right: var(--le-padding-xs, 0.25rem);
}
.form-input-shared {
width: 100%;
padding: var(--le-padding-s, 0.5rem);
border: 1px solid var(--le-border-color-medium, #ddd);
border-radius: var(--le-border-radius-standard, 4px);
font-size: var(--le-font-size-base, 1rem);
background-color: var(--le-background-color-panel, #fff);
color: var(--le-text-color-primary, #333);
box-sizing: border-box;
}
.form-input-shared:focus {
outline: none;
border-color: var(--le-border-color-focus, #007cba);
box-shadow: 0 0 0 2px var(--le-background-color-focus-ring, rgba(0, 124, 186, 0.2));
}
.form-input-shared:disabled {
background-color: var(--le-background-color-disabled, #f5f5f5);
color: var(--le-text-color-disabled, #999);
cursor: not-allowed;
}
.form-error-shared {
color: var(--le-text-color-error, #d32f2f);
background-color: var(--le-background-color-error, #ffeaa7);
padding: var(--le-padding-s, 0.5rem);
border: 1px solid var(--le-border-color-error, #e74c3c);
border-radius: var(--le-border-radius-standard, 4px);
margin-bottom: var(--le-padding-s, 0.5rem);
}
/* Update button styling */
.button-update {
background-color: var(--le-background-color-accent, #4caf50) !important;
color: white !important;
border-color: var(--le-border-color-accent, #45a049) !important;
}
.button-update:hover {
background-color: var(--le-background-color-accent-hover, #45a049) !important;
border-color: var(--le-border-color-accent-hover, #3d8b40) !important;
}
/* Mobile-specific adjustments */
@media (max-width: 480px) {
.teams-manager-content {
width: 95% !important;
max-width: 95% !important;
margin: 5% auto;
font-size: 16px !important;
max-height: 95vh;
}
.teams-manager-header {
padding: 15px;
}
.teams-manager-header h3 {
font-size: 18px !important;
}
.teams-manager-body {
padding: 15px;
gap: 15px;
}
.teams-manager-footer {
padding: 15px;
flex-direction: column;
gap: 15px;
}
.footer-options {
order: 1;
justify-content: center;
}
.footer-buttons {
order: 2;
flex-direction: column-reverse;
gap: 10px;
}
.footer-buttons .button-shared {
width: 100%;
margin: 0;
}
.teams-action-buttons {
flex-direction: column;
gap: 10px;
}
.teams-action-buttons .button-shared {
width: 100%;
min-width: auto;
}
.teams-list-container {
max-height: 150px;
}
.team-list-item {
padding: 15px 10px;
}
.team-list-item.selected {
flex-direction: column;
align-items: stretch;
gap: 10px;
}
.team-info {
order: 1;
}
.team-actions {
order: 2;
justify-content: flex-end;
}
.team-actions .button-shared {
width: auto;
min-width: 80px;
}
.team-editor-header {
padding: 15px 10px;
flex-direction: column;
gap: 10px;
align-items: flex-start;
}
.team-editor-body {
padding: 15px 10px;
}
.team-editor-footer {
padding: 15px 10px;
flex-direction: column-reverse;
gap: 10px;
}
.team-editor-footer .button-shared {
width: 100%;
}
.form-label-shared {
font-size: 16px !important;
margin-bottom: 8px;
}
.form-input-shared {
font-size: 16px !important;
padding: 10px !important;
height: auto !important;
}
.button-shared {
font-size: 16px !important;
padding: 10px 15px !important;
min-height: 44px;
}
.button-sm {
font-size: 14px !important;
padding: 8px 12px !important;
min-height: 36px;
}
}
`;