aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/components/ui
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-11-19 15:04:55 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-11-19 15:05:34 +0100
commitd51169f6411b68a226d76d2d39826904de484929 (patch)
tree4d8a403dfcc5b17671a92b8cc1e5d71d20ed9537 /src/frontend/app/components/ui
parentd434204860fc0409ad6343e815d0057b97ce3573 (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.css39
-rw-r--r--src/frontend/app/components/ui/Button.tsx25
-rw-r--r--src/frontend/app/components/ui/PageContainer.css20
-rw-r--r--src/frontend/app/components/ui/PageContainer.tsx14
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>;
+};