akhaliq's picture
akhaliq HF Staff
Upload folder using huggingface_hub
c79dce5 verified
import gradio as gr
def calculator(num1, operation, num2):
"""Perform basic arithmetic operations."""
if operation == "โž• Add":
return num1 + num2
elif operation == "โž– Subtract":
return num1 - num2
elif operation == "โœ–๏ธ Multiply":
return num1 * num2
elif operation == "โž— Divide":
if num2 == 0:
raise gr.Error("Cannot divide by zero!")
return num1 / num2
# Custom CSS for modern, mobile-friendly design
custom_css = """
/* Container styling */
.gradio-container {
max-width: 500px !important;
margin: 0 auto !important;
}
/* Header styling */
.header-container {
text-align: center;
padding: 1.5rem 0 1rem 0;
}
.header-container h1 {
font-size: 2rem;
font-weight: 700;
margin-bottom: 0.5rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.header-link {
font-size: 0.875rem;
opacity: 0.7;
margin-top: 0.25rem;
}
/* Input/Output styling */
.input-group {
background: rgba(255, 255, 255, 0.05);
border-radius: 1rem;
padding: 1.5rem;
margin-bottom: 1rem;
}
/* Button styling */
.calculate-btn button {
width: 100%;
height: 3.5rem;
font-size: 1.125rem;
font-weight: 600;
border-radius: 0.75rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
transition: all 0.3s ease;
}
.calculate-btn button:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(102, 126, 234, 0.3);
}
/* Result styling */
.result-display {
background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
border-radius: 1rem;
padding: 1rem;
margin: 1rem 0;
}
/* Radio button styling */
.radio-group {
display: grid !important;
grid-template-columns: repeat(2, 1fr) !important;
gap: 0.75rem !important;
}
/* Examples styling */
.examples-container {
margin-top: 1.5rem;
padding-top: 1.5rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
/* Mobile responsive */
@media (max-width: 640px) {
.header-container h1 {
font-size: 1.75rem;
}
.input-group {
padding: 1rem;
}
.calculate-btn button {
height: 3rem;
font-size: 1rem;
}
}
"""
# Create the Gradio app
with gr.Blocks(fill_height=False) as demo:
# Header
with gr.Column(elem_classes="header-container"):
gr.Markdown("# ๐Ÿงฎ Calculator")
gr.Markdown(
"Built with [anycoder](https://huggingface.co/spaces/akhaliq/anycoder)",
elem_classes="header-link"
)
# Input Section
with gr.Column(elem_classes="input-group"):
num1 = gr.Number(
label="First Number",
placeholder="0",
value=0,
container=True,
scale=1
)
operation = gr.Radio(
choices=["โž• Add", "โž– Subtract", "โœ–๏ธ Multiply", "โž— Divide"],
value="โž• Add",
label="Operation",
elem_classes="radio-group"
)
num2 = gr.Number(
label="Second Number",
placeholder="0",
value=0,
container=True,
scale=1
)
# Calculate Button
with gr.Column(elem_classes="calculate-btn"):
submit_btn = gr.Button(
"Calculate",
variant="primary",
size="lg"
)
# Result Section
with gr.Column(elem_classes="result-display"):
result = gr.Number(
label="Result",
interactive=False,
container=True,
scale=1
)
# Examples Section
with gr.Column(elem_classes="examples-container"):
gr.Markdown("### Quick Examples")
examples = gr.Examples(
examples=[
[45, "โž• Add", 3],
[100, "โž– Subtract", 25],
[12, "โœ–๏ธ Multiply", 8],
[144, "โž— Divide", 12],
],
inputs=[num1, operation, num2],
outputs=[result],
fn=calculator,
cache_examples=False
)
# Event handlers
submit_btn.click(
fn=calculator,
inputs=[num1, operation, num2],
outputs=[result],
api_visibility="public"
)
# Also trigger on Enter key
num1.submit(
fn=calculator,
inputs=[num1, operation, num2],
outputs=[result]
)
num2.submit(
fn=calculator,
inputs=[num1, operation, num2],
outputs=[result]
)
if __name__ == "__main__":
demo.launch(
theme=gr.themes.Soft(
primary_hue="indigo",
secondary_hue="purple",
neutral_hue="slate",
font=gr.themes.GoogleFont("Inter"),
text_size="lg",
spacing_size="md",
radius_size="lg"
).set(
button_primary_background_fill="*primary_600",
button_primary_background_fill_hover="*primary_700",
block_title_text_weight="600",
block_label_text_weight="500",
),
css=custom_css,
footer_links=[
{"label": "Built with anycoder", "url": "https://huggingface.co/spaces/akhaliq/anycoder"}
]
)