aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/components/ui
diff options
context:
space:
mode:
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>;
+};