diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2025-11-19 15:04:55 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2025-11-19 15:05:34 +0100 |
| commit | d51169f6411b68a226d76d2d39826904de484929 (patch) | |
| tree | 4d8a403dfcc5b17671a92b8cc1e5d71d20ed9537 /src/frontend/app/components/ui | |
| parent | d434204860fc0409ad6343e815d0057b97ce3573 (diff) | |
feat: Add About and Favourites pages, update routing and context management
- Added new routes for About and Favourites pages.
- Implemented About page with version information and credits.
- Created Favourites page with a placeholder message for empty favourites.
- Refactored RegionConfig import paths for consistency.
- Introduced PageTitleContext to manage page titles dynamically.
- Updated various components to utilize the new context for setting page titles.
- Enhanced AppShell layout with a responsive Drawer for navigation.
- Added CSS styles for new components and pages.
- Integrated commit hash display in the About page for version tracking.
Diffstat (limited to 'src/frontend/app/components/ui')
| -rw-r--r-- | src/frontend/app/components/ui/Button.css | 39 | ||||
| -rw-r--r-- | src/frontend/app/components/ui/Button.tsx | 25 | ||||
| -rw-r--r-- | src/frontend/app/components/ui/PageContainer.css | 20 | ||||
| -rw-r--r-- | src/frontend/app/components/ui/PageContainer.tsx | 14 |
4 files changed, 98 insertions, 0 deletions
diff --git a/src/frontend/app/components/ui/Button.css b/src/frontend/app/components/ui/Button.css new file mode 100644 index 0000000..bf02a7c --- /dev/null +++ b/src/frontend/app/components/ui/Button.css @@ -0,0 +1,39 @@ +.ui-button { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1.5rem; + border-radius: 0.5rem; + font-size: 0.9rem; + font-weight: 500; + cursor: pointer; + transition: background-color 0.2s ease, transform 0.1s ease; + border: none; +} + +.ui-button:active { + transform: translateY(1px); +} + +.ui-button--primary { + background: var(--button-background-color); + color: white; +} + +.ui-button--primary:hover { + background: var(--button-hover-background-color); +} + +.ui-button--secondary { + background: var(--border-color); + color: var(--text-color); +} + +.ui-button--secondary:hover { + background: #e0e0e0; +} + +.ui-button__icon { + display: flex; + align-items: center; +} diff --git a/src/frontend/app/components/ui/Button.tsx b/src/frontend/app/components/ui/Button.tsx new file mode 100644 index 0000000..18a15b2 --- /dev/null +++ b/src/frontend/app/components/ui/Button.tsx @@ -0,0 +1,25 @@ +import React from "react"; +import "./Button.css"; + +interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { + variant?: "primary" | "secondary" | "outline"; + icon?: React.ReactNode; +} + +export const Button: React.FC<ButtonProps> = ({ + children, + variant = "primary", + icon, + className = "", + ...props +}) => { + return ( + <button + className={`ui-button ui-button--${variant} ${className}`} + {...props} + > + {icon && <span className="ui-button__icon">{icon}</span>} + {children} + </button> + ); +}; diff --git a/src/frontend/app/components/ui/PageContainer.css b/src/frontend/app/components/ui/PageContainer.css new file mode 100644 index 0000000..8a86035 --- /dev/null +++ b/src/frontend/app/components/ui/PageContainer.css @@ -0,0 +1,20 @@ +.page-container { + max-width: 100%; + padding: 0 16px; + background-color: var(--background-color); + color: var(--text-color); +} + +@media (min-width: 768px) { + .page-container { + width: 90%; + max-width: 768px; + margin: 0 auto; + } +} + +@media (min-width: 1024px) { + .page-container { + max-width: 1024px; + } +} diff --git a/src/frontend/app/components/ui/PageContainer.tsx b/src/frontend/app/components/ui/PageContainer.tsx new file mode 100644 index 0000000..4c9684a --- /dev/null +++ b/src/frontend/app/components/ui/PageContainer.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import "./PageContainer.css"; + +interface PageContainerProps { + children: React.ReactNode; + className?: string; +} + +export const PageContainer: React.FC<PageContainerProps> = ({ + children, + className = "", +}) => { + return <div className={`page-container ${className}`}>{children}</div>; +}; |
