frontend_nyla/src/components/FormGenerator/ActionButtons/ActionButton.module.css

332 lines
8.5 KiB
CSS

/* Action Button Base Styles */
.actionButton {
display: flex;
align-items: center;
justify-content: center;
padding: 5px;
border: none;
border-radius: 6px;
font-size: 12px;
font-family: var(--font-family);
cursor: pointer;
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
white-space: nowrap;
position: relative;
min-width: 28px;
min-height: 28px;
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: #fff;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.actionButton:hover {
transform: translateY(-1px);
box-shadow: 0 3px 8px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.actionButton:active {
transform: translateY(0);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.15);
}
.actionButton:disabled {
opacity: 0.4;
cursor: not-allowed;
transform: none !important;
box-shadow: none !important;
}
.actionButton.disabled {
opacity: 0.4;
cursor: not-allowed;
transform: none !important;
background: var(--color-gray-disabled, #CBD5E0) !important;
color: var(--color-text-secondary, #718096) !important;
box-shadow: none !important;
}
.actionButton.disabled:hover {
background: var(--color-gray-disabled, #CBD5E0) !important;
transform: none !important;
box-shadow: none !important;
}
.actionButton:focus-visible {
outline: none;
box-shadow: 0 0 0 2px var(--color-bg, #fff), 0 0 0 4px rgba(var(--color-secondary-rgb, 74, 111, 165), 0.5);
}
.actionIcon {
font-size: 14px;
height: 14px;
width: 14px;
display: flex;
align-items: center;
justify-content: center;
filter: drop-shadow(0 1px 0 rgba(0, 0, 0, 0.1));
}
/* Loading State */
.actionButton.loading {
opacity: 0.65;
cursor: not-allowed;
}
.actionButton.loading .actionIcon {
animation: spin 1s linear infinite;
}
.actionButton.delete.loading .actionIcon {
animation: none;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
/* Delete Confirmation Buttons */
.deleteConfirmButtons {
display: flex;
gap: 2px;
justify-content: center;
align-items: center;
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
border-radius: 6px;
padding: 2px;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
}
.confirmButton {
background: transparent !important;
color: white !important;
min-width: 24px;
min-height: 24px;
padding: 4px;
box-shadow: none !important;
}
.confirmButton:hover {
background: rgba(255, 255, 255, 0.18) !important;
transform: none;
}
.cancelButton {
background: transparent !important;
color: white !important;
min-width: 24px;
min-height: 24px;
padding: 4px;
box-shadow: none !important;
}
.cancelButton:hover {
background: rgba(255, 255, 255, 0.18) !important;
transform: none;
}
/* Action Button Container */
.actionButtons {
display: flex;
gap: 5px;
justify-content: center;
align-items: center;
width: 100%;
margin: 0 auto;
}
/* Button Variants */
.actionButton.edit {
background: linear-gradient(180deg, #5a82b5 0%, var(--color-secondary, #4A6FA5) 100%);
color: white;
}
.actionButton.edit:hover {
background: linear-gradient(180deg, var(--color-secondary, #4A6FA5) 0%, var(--color-secondary-hover, #3D5D8A) 100%);
box-shadow: 0 3px 8px rgba(74, 111, 165, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.actionButton.delete {
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: white;
}
.actionButton.delete:hover {
background: linear-gradient(180deg, #d44040 0%, var(--color-red, #C53030) 100%);
box-shadow: 0 3px 8px rgba(197, 48, 48, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.actionButton.download {
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: white;
}
.actionButton.download:hover {
background: linear-gradient(180deg, #6b7b8d 0%, var(--color-gray-hover, #4A5568) 100%);
}
.actionButton.view {
background: linear-gradient(180deg, #5a82b5 0%, var(--color-secondary, #4A6FA5) 100%);
color: white;
}
.actionButton.view:hover {
background: linear-gradient(180deg, var(--color-secondary, #4A6FA5) 0%, var(--color-secondary-hover, #3D5D8A) 100%);
box-shadow: 0 3px 8px rgba(74, 111, 165, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.actionButton.copy {
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: white;
}
.actionButton.copy:hover {
background: linear-gradient(180deg, #6b7b8d 0%, var(--color-gray-hover, #4A5568) 100%);
}
.actionButton.connect {
background: linear-gradient(180deg, #5a82b5 0%, var(--color-secondary, #4A6FA5) 100%);
color: white;
}
.actionButton.connect:hover {
background: linear-gradient(180deg, var(--color-secondary, #4A6FA5) 0%, var(--color-secondary-hover, #3D5D8A) 100%);
box-shadow: 0 3px 8px rgba(74, 111, 165, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
.actionButton.refresh {
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: white;
}
.actionButton.refresh:hover {
background: linear-gradient(180deg, #6b7b8d 0%, var(--color-gray-hover, #4A5568) 100%);
}
.actionButton.remove {
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: white;
}
.actionButton.remove:hover {
background: linear-gradient(180deg, #d44040 0%, var(--color-red, #C53030) 100%);
box-shadow: 0 3px 8px rgba(197, 48, 48, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
}
/* Generic Custom Action Button */
.actionButton.custom {
background: linear-gradient(180deg, #8494a7 0%, #6b7b8d 100%);
color: white;
}
.actionButton.custom:hover {
background: linear-gradient(180deg, #6b7b8d 0%, var(--color-gray-hover, #4A5568) 100%);
}
/* Success State */
.actionButton.success {
background: linear-gradient(180deg, #48bb78 0%, var(--color-success, #38A169) 100%) !important;
color: white !important;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.15) !important;
}
.actionButton.success:hover {
background: linear-gradient(180deg, var(--color-success, #38A169) 0%, var(--color-success-hover, #2F855A) 100%) !important;
box-shadow: 0 3px 8px rgba(56, 161, 105, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
}
/* Error State */
.actionButton.error {
background: linear-gradient(180deg, #e53e3e 0%, var(--color-red, #C53030) 100%) !important;
color: white !important;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
}
.actionButton.error:hover {
background: linear-gradient(180deg, var(--color-red, #C53030) 0%, #9B2C2C 100%) !important;
box-shadow: 0 3px 8px rgba(197, 48, 48, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
}
/* Compact mode (sidebar/UDB) */
.compact {
width: 20px !important;
height: 20px !important;
min-width: 0 !important;
min-height: 0 !important;
padding: 0 !important;
background: transparent !important;
box-shadow: none !important;
color: var(--color-text-secondary, #6b7280) !important;
border-radius: 3px !important;
flex-shrink: 0;
}
.compact .actionIcon {
font-size: 12px !important;
width: 12px !important;
height: 12px !important;
filter: none !important;
}
.compact:hover {
background: var(--color-secondary, #4A6FA5) !important;
color: #fff !important;
box-shadow: none !important;
transform: none !important;
}
/* Responsive Design */
@media (max-width: 768px) {
.actionButtons {
flex-direction: column;
gap: 4px;
}
.actionButton {
padding: 4px;
font-size: 11px;
min-width: 24px;
min-height: 24px;
}
.actionIcon {
font-size: 13px;
height: 13px;
width: 13px;
}
}
/* Dark theme support */
@media (prefers-color-scheme: dark) {
.actionButton {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.actionButton:hover {
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.actionButton.edit {
background: linear-gradient(180deg, #6a92c5 0%, var(--color-secondary) 100%);
}
.actionButton.edit:hover {
background: linear-gradient(180deg, var(--color-secondary) 0%, var(--color-secondary-hover) 100%);
}
.actionButton.delete {
background: linear-gradient(180deg, #9ca3af 0%, var(--color-gray) 100%);
}
.actionButton.delete:hover {
background: linear-gradient(180deg, #fc8181 0%, var(--color-red) 100%);
}
.actionButton.view {
background: linear-gradient(180deg, #6a92c5 0%, var(--color-secondary) 100%);
}
.actionButton.view:hover {
background: linear-gradient(180deg, var(--color-secondary) 0%, var(--color-secondary-hover) 100%);
}
}