Refactor transaction components and styles

- Updated imports to use absolute paths for types and utilities.
- Enhanced TransactionTable component with mobile responsiveness and card-based layout.
- Improved loading and error handling in transaction fetching logic.
- Refactored transaction update API to streamline validation and data preparation.
- Added new styles for Radix UI components and improved global styles for better mobile experience.
- Implemented collapsible sections and improved button interactions in the UI.
- Updated tests to reflect changes in component structure and imports.
This commit is contained in:
GitHub Copilot
2025-05-07 17:10:21 -04:00
parent 7b3f9afa1a
commit d8678e68ed
19 changed files with 1285 additions and 443 deletions

189
src/styles/radix-ui.css Normal file
View File

@@ -0,0 +1,189 @@
/* Radix UI Form Styles */
.form-root {
width: 100%;
box-sizing: border-box;
}
.form-field {
display: flex;
flex-direction: column;
margin-bottom: 16px;
width: 100%;
}
.form-label {
font-size: 14px;
font-weight: 500;
margin-bottom: 6px;
color: #333;
}
.form-message {
font-size: 12px;
color: #e11d48;
}
.form-input {
padding: 8px 12px;
border-radius: 4px;
border: 1px solid #d1d5db;
font-size: 14px;
width: 100%;
box-sizing: border-box;
background-color: white;
transition: border-color 0.2s;
height: 38px; /* Match height of dropdown */
}
.form-input:focus {
outline: none;
border-color: #2563eb;
box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.2);
}
.form-input:disabled {
background-color: #f3f4f6;
cursor: not-allowed;
}
/* Amount input specific styling */
.amount-input-wrapper {
position: relative;
display: flex;
align-items: center;
width: 100%;
}
.currency-symbol {
position: absolute;
left: 12px;
color: #666;
font-size: 14px;
}
.amount-input {
padding-left: 24px;
}
/* Toast Notifications */
.toast-viewport {
position: fixed;
bottom: 0;
right: 0;
display: flex;
flex-direction: column;
padding: 16px;
gap: 8px;
width: 390px;
max-width: 100vw;
margin: 0;
list-style: none;
z-index: 2147483647;
outline: none;
}
.toast-root {
background-color: #fff;
border-radius: 6px;
box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);
padding: 12px;
display: flex;
align-items: center;
justify-content: space-between;
border-left: 4px solid #22c55e;
margin-bottom: 8px;
}
.toast-title {
font-weight: 500;
color: #111;
font-size: 14px;
}
.toast-close-button {
background: transparent;
border: none;
color: #666;
cursor: pointer;
padding: 4px;
border-radius: 4px;
}
.toast-close-button:hover {
background-color: #f3f4f6;
}
/* Error message */
.error-message {
background-color: #fee2e2;
color: #b91c1c;
padding: 8px 12px;
border-radius: 4px;
margin-bottom: 16px;
font-size: 14px;
border-left: 4px solid #b91c1c;
width: 100%;
box-sizing: border-box;
}
/* Form Actions */
.form-actions {
display: flex;
justify-content: space-between;
gap: 8px;
margin-top: 16px;
width: 100%;
}
.cancel-btn {
padding: 8px 16px;
background-color: transparent;
border: 1px solid #d1d5db;
border-radius: 4px;
font-size: 14px;
color: #4b5563;
cursor: pointer;
transition: background-color 0.2s;
height: 38px;
flex: 1;
}
.cancel-btn:hover:not(:disabled) {
background-color: #f3f4f6;
}
.submit-btn {
padding: 8px 16px;
background-color: #2563eb;
border: none;
border-radius: 4px;
font-size: 14px;
color: white;
cursor: pointer;
transition: background-color 0.2s;
height: 38px;
flex: 1;
}
.submit-btn:hover:not(:disabled) {
background-color: #1d4ed8;
}
.submit-btn:disabled,
.cancel-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* Sidebar component adjustments */
.sidebar select,
.sidebar button,
.sidebar input {
width: 100%;
box-sizing: border-box;
}
/* Make date picker fill entire width */
input[type="date"].form-input {
width: 100%;
}