| from fastapi import FastAPI |
| from fastapi.responses import HTMLResponse |
| from xue import HTML, Head, Body, Div, xue_initialize, Script |
| from xue.components import dropdown, sheet, button, form, input |
|
|
| xue_initialize(tailwind=True) |
| app = FastAPI() |
|
|
| @app.get("/", response_class=HTMLResponse) |
| async def root(): |
| result = HTML( |
| Head( |
| title="Dropdown with Edit Sheet Example", |
| ), |
| Body( |
| Div( |
| dropdown.dropdown_menu("Actions"), |
| Div(id="sheet-container"), |
| class_="container mx-auto p-4" |
| ) |
| ) |
| ).render() |
| print(result) |
| return result |
|
|
| @app.get("/dropdown-menu/{menu_id}", response_class=HTMLResponse) |
| async def get_dropdown_menu_content(menu_id: str): |
| items = [ |
| { |
| "icon": "pencil", |
| "label": "Edit", |
| "hx-get": "/edit-sheet", |
| "hx-target": "#sheet-container", |
| "hx-swap": "innerHTML" |
| }, |
| {"icon": "trash", "label": "Delete"}, |
| {"icon": "copy", "label": "Duplicate"}, |
| ] |
| result = dropdown.dropdown_menu_content(menu_id, items).render() |
| print("dropdown-menu result", result) |
| return result |
|
|
| @app.get("/edit-sheet", response_class=HTMLResponse) |
| async def get_edit_sheet(): |
| edit_sheet_content = sheet.SheetContent( |
| sheet.SheetHeader( |
| sheet.SheetTitle("Edit Item"), |
| sheet.SheetDescription("Make changes to your item here.") |
| ), |
| sheet.SheetBody( |
| form.Form( |
| form.FormField("Name", "name", placeholder="Enter item name"), |
| form.FormField("Description", "description", placeholder="Enter item description"), |
| Div( |
| button.button("Save", class_="bg-blue-500 text-white"), |
| button.button("Cancel", class_="bg-gray-300 text-gray-700 ml-2", data_close_sheet="true"), |
| class_="flex justify-end mt-4" |
| ), |
| class_="space-y-4" |
| ) |
| ) |
| ) |
|
|
| result = sheet.Sheet( |
| "edit-sheet", |
| Div(), |
| edit_sheet_content, |
| width="80%", |
| max_width="800px" |
| ).render() |
| return result |
|
|
| if __name__ == "__main__": |
| import uvicorn |
| uvicorn.run("__main__:app", host="0.0.0.0", port=8000, reload=True) |