import gradio as gr import calendar events={} state={"year":2026,"month":1,"day":None} def render(): y,m=state["year"],state["month"] cal=calendar.monthcalendar(y,m) md=f"## {calendar.month_name[m]} {y}\n\n|Mon|Tue|Wed|Thu|Fri|Sat|Sun|\n|---|---|---|---|---|---|---|\n" for wk in cal: cells=[] for d in wk: if d==0: cells.append(" ") else: k=f"{y}-{m:02}-{d:02}" txt=str(d) if k in events: txt=f"**{d}**
{events[k]['event']}" cells.append(txt) md+="|"+"|".join(cells)+"|\n" return md,f"{calendar.month_name[m]} {y}" def prev(): if state["month"]>1: state["month"]-=1 return render() def nxt(): if state["month"]<12: state["month"]+=1 return render() def pick(day): if not day: return "Select a day","","Blue" state["day"]=int(day) k=f"{state['year']}-{state['month']:02}-{state['day']:02}" e=events.get(k,{"event":"","color":"Blue"}) return k,e["event"],e["color"] def save(ev,col): if state["day"] is None: return render()[0],"Pick a day." k=f"{state['year']}-{state['month']:02}-{state['day']:02}" events[k]={"event":ev,"color":col} return render()[0],f"Saved {k}" def create_planner(): with gr.Column() as planner: title=gr.Markdown() cal=gr.Markdown() with gr.Row(): b1=gr.Button("⬅ Previous") b2=gr.Button("Next ➡") day=gr.Dropdown([str(i) for i in range(1,32)],label="Day") sel=gr.Textbox(label="Selected",interactive=False) ev=gr.Textbox(label="Event") col=gr.Dropdown(["Blue","Green","Pink","Purple","Yellow"],value="Blue") gr.Button("Select Day").click(pick,day,[sel,ev,col]) out=gr.Markdown() gr.Button("Save Event").click(save,[ev,col],[cal,out]) b1.click(prev,outputs=[cal,title]) b2.click(nxt,outputs=[cal,title]) c,t=render(); cal.value=c; title.value=t return planner