diff --git a/examples/app.py b/examples/app.py index fd717b45..6a9166c0 100644 --- a/examples/app.py +++ b/examples/app.py @@ -1,7 +1,10 @@ +import uvicorn from starlette.responses import FileResponse, RedirectResponse, JSONResponse, HTMLResponse +from starlette.exceptions import HTTPException from fastcore.utils import * from fastcore.xml import * from fasthtml import * +from starlette.requests import Request from impl import * @@ -10,7 +13,13 @@ integrity="sha384-ujb1lZYygJmzgSwoxRggbCHcjc0rB2XoQrxeTUQyRjrOnlCoYta87iKBWq3EsdM2") mycss = Link(rel="stylesheet", href="picovars.css") -app = FastHTML() +class NotFoundException(HTTPException): + def __init__(self, detail=None): return super().__init__(404, detail=detail) + +async def not_found(request: Request, exc: Exception): + return HTMLResponse(content=exc.detail, status_code=exc.status_code) + +app = FastHTML(exception_handlers={ 404: not_found, NotFoundException: not_found }) reg_re_param("static", "ico|gif|jpg|jpeg|webm|css|js") @app.get("/{fname:path}.{ext:static}") @@ -18,11 +27,21 @@ async def image(fname:str, ext:str): return FileResponse(f'{fname}.{ext}') @app.get("/static/{fname:path}") async def static(fname:str): return FileResponse(f'static/{fname}') +def mk_input(**kw): return Input(id="new-title", name="title", placeholder="New Todo", **kw) + @app.get("/") async def get_todos(req): + add = Form(Group(mk_input(), Button("Add")), + hx_post="/", target_id=id_list, hx_swap="beforeend") + todos = Ul(*TODO_LIST, id=id_list) + main = Main( + H1('Todo list'), + Card(todos, header=add, footer=Div(id=id_curr)), + cls='container') return Html( Head(Title('TODO list'), htmxscr, picolink, mycss), - Body(Main(H1('Todo list'), get_card(TODO_LIST), cls='container'))) + Body(main) + ) @app.post("/") async def add_item(todo:TodoItem): @@ -51,3 +70,5 @@ async def get_todo(id:int): btn = Button('delete', hx_delete=f'/todos/{todo.id}', target_id=tid(todo.id), hx_swap="outerHTML") return Div(Div(todo.title), btn) + +if __name__ == "__main__": uvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True) diff --git a/examples/favicon.ico b/examples/favicon.ico new file mode 100644 index 00000000..8d9f7f30 Binary files /dev/null and b/examples/favicon.ico differ diff --git a/examples/impl.ipynb b/examples/impl.ipynb index 38280d23..fea50c79 100644 --- a/examples/impl.ipynb +++ b/examples/impl.ipynb @@ -35,18 +35,31 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 46, "id": "6c3dcdbc", "metadata": {}, "outputs": [], "source": [ "from pprint import pprint\n", - "from IPython import display" + "from IPython.display import HTML,Markdown" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 62, + "id": "009a6104", + "metadata": {}, + "outputs": [], + "source": [ + "@patch\n", + "def _repr_html_(self:httpx.Response): return self.text\n", + "\n", + "def md(self): return Markdown(f'```xml\\n{self.text}```')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, "id": "403b7068", "metadata": {}, "outputs": [ @@ -59,7 +72,7 @@ "" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -70,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "id": "d0bfcb37", "metadata": {}, "outputs": [ @@ -98,7 +111,7 @@ "" ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -109,17 +122,7 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "bd8b2baa", - "metadata": {}, - "outputs": [], - "source": [ - "# debug=True, exception_handlers=exception_handlers" - ] - }, - { - "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "id": "2a810b91", "metadata": {}, "outputs": [], @@ -144,11 +147,12 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "de14f516", "metadata": {}, "outputs": [], "source": [ + "#|export\n", "TODO_LIST = [TodoItem(id=0, title=\"Start writing todo list\", done=True),\n", " TodoItem(id=1, title=\"???\", done=False),\n", " TodoItem(id=2, title=\"Profit\", done=False)]" @@ -156,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "96541e48", "metadata": {}, "outputs": [ @@ -181,7 +185,7 @@ "TodoItem(title='Start writing todo list', id=0, done=True)" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -193,7 +197,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "id": "3035bd4c", "metadata": {}, "outputs": [ @@ -215,7 +219,7 @@ "" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -226,7 +230,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "id": "50c7a5ed", "metadata": {}, "outputs": [ @@ -270,147 +274,18 @@ "" ] }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "show(Ul(*TODO_LIST))" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "25d16330", - "metadata": {}, - "outputs": [], - "source": [ - "#| export\n", - "def mk_input(**kw): return Input(name=\"title\", placeholder=\"New Todo\", **kw)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "7ef79e4c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "
\n", - " \n", - " \n", - "
\n", - "
\n" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "inp = Group(mk_input(), Button(\"Add\"))\n", - "add = Form(inp, hx_post=\"/\", target_id=id_list, hx_swap=\"beforeend\")\n", - "show(add)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "1aceba92", - "metadata": {}, - "outputs": [], - "source": [ - "#| export\n", - "def get_card(todos):\n", - " inp = Group(mk_input(), Button(\"Add\"))\n", - " add = Form(inp, hx_post=\"/\", target_id=id_list, hx_swap=\"beforeend\")\n", - " return Card(Ul(*todos, id=id_list),\n", - " header=add, footer=Div(id=id_curr))" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "ecd57e96", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n" - ], - "text/plain": [ - "" - ] - }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "show(get_card(TODO_LIST))" + "show(Ul(*TODO_LIST))" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 34, "id": "fbe84f82", "metadata": {}, "outputs": [], @@ -423,7 +298,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 35, "id": "e9f922f5", "metadata": {}, "outputs": [ @@ -443,7 +318,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 36, "id": "39fa9107", "metadata": {}, "outputs": [], @@ -460,14 +335,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 37, "id": "f5c08ca9", "metadata": {}, "outputs": [ { "data": { "text/html": [ - "
\n", + "\n", "
\n", " \n", " \n", + "
\n", + "
\n", + " \n", + " \n", + "
\n", + "
\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "md(r)" + ] + }, { "cell_type": "markdown", "id": "47563f59", @@ -526,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 44, "id": "957ff1b9", "metadata": {}, "outputs": [], diff --git a/examples/impl.py b/examples/impl.py index cc9870c4..d7842d3d 100644 --- a/examples/impl.py +++ b/examples/impl.py @@ -1,7 +1,7 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: impl.ipynb. # %% auto 0 -__all__ = ['id_curr', 'id_list', 'TODO_LIST', 'tid', 'TodoItem', 'mk_input', 'get_card', 'find_todo', 'get_editform'] +__all__ = ['id_curr', 'id_list', 'TODO_LIST', 'tid', 'TodoItem', 'find_todo', 'get_editform'] # %% impl.ipynb 2 from dataclasses import dataclass @@ -10,7 +10,7 @@ from fastcore.xml import * from fasthtml import * -# %% impl.ipynb 7 +# %% impl.ipynb 9 id_curr = 'current-todo' id_list = 'todo-list' def tid(id): return f'todo-{id}' @@ -27,20 +27,11 @@ def __xt__(self): _repr_html_ = showtags +# %% impl.ipynb 10 TODO_LIST = [TodoItem(id=0, title="Start writing todo list", done=True), TodoItem(id=1, title="???", done=False), TodoItem(id=2, title="Profit", done=False)] -# %% impl.ipynb 10 -def mk_input(**kw): return Input(name="title", placeholder="New Todo", **kw) - -# %% impl.ipynb 12 -def get_card(todos): - inp = Group(mk_input(), Button("Add")) - add = Form(inp, hx_post="/", target_id=id_list, hx_swap="beforeend") - return Card(Ul(*todos, id=id_list), - header=add, footer=Div(id=id_curr)) - # %% impl.ipynb 14 def find_todo(id): try: return next(o for o in TODO_LIST if o.id==id) diff --git a/examples/picovars.css b/examples/picovars.css new file mode 100644 index 00000000..95246738 --- /dev/null +++ b/examples/picovars.css @@ -0,0 +1,21 @@ +body { + /*max-width: 60rem;*/ + margin: 0 auto; +} + +@media (min-width: 576px) { + :root { --pico-font-size: 100%; } +} +@media (min-width: 768px) { + :root { --pico-font-size: 100%; } +} +@media (min-width: 1024px) { + :root { --pico-font-size: 100%; } +} +@media (min-width: 1280px) { + :root { --pico-font-size: 100%; } +} +@media (min-width: 1536px) { + :root { --pico-font-size: 100%; } +} + diff --git a/fasthtml/_modidx.py b/fasthtml/_modidx.py index 7a5bf4b2..9829e2f1 100644 --- a/fasthtml/_modidx.py +++ b/fasthtml/_modidx.py @@ -19,16 +19,17 @@ 'fasthtml.components.xt_html': ('components.html#xt_html', 'fasthtml/components.py'), 'fasthtml.components.xt_hx': ('components.html#xt_hx', 'fasthtml/components.py')}, 'fasthtml.core': { 'fasthtml.core.FastHTML': ('core.html#fasthtml', 'fasthtml/core.py'), - 'fasthtml.core.FastHTML.__call__': ('core.html#fasthtml.__call__', 'fasthtml/core.py'), 'fasthtml.core.FastHTML.__init__': ('core.html#fasthtml.__init__', 'fasthtml/core.py'), - 'fasthtml.core.FastHTML.add_route': ('core.html#fasthtml.add_route', 'fasthtml/core.py'), 'fasthtml.core.FastHTML.route': ('core.html#fasthtml.route', 'fasthtml/core.py'), 'fasthtml.core.RouteX': ('core.html#routex', 'fasthtml/core.py'), 'fasthtml.core.RouteX.__init__': ('core.html#routex.__init__', 'fasthtml/core.py'), + 'fasthtml.core.RouterX': ('core.html#routerx', 'fasthtml/core.py'), + 'fasthtml.core.RouterX.add_route': ('core.html#routerx.add_route', 'fasthtml/core.py'), 'fasthtml.core._find_p': ('core.html#_find_p', 'fasthtml/core.py'), 'fasthtml.core._fix_anno': ('core.html#_fix_anno', 'fasthtml/core.py'), 'fasthtml.core._form_arg': ('core.html#_form_arg', 'fasthtml/core.py'), 'fasthtml.core._from_body': ('core.html#_from_body', 'fasthtml/core.py'), + 'fasthtml.core._get_htmx': ('core.html#_get_htmx', 'fasthtml/core.py'), 'fasthtml.core._wrap_ep': ('core.html#_wrap_ep', 'fasthtml/core.py'), 'fasthtml.core._wrap_req': ('core.html#_wrap_req', 'fasthtml/core.py'), 'fasthtml.core._wrap_resp': ('core.html#_wrap_resp', 'fasthtml/core.py'), diff --git a/fasthtml/components.pyi b/fasthtml/components.pyi index c0b87e01..2a5dca62 100644 --- a/fasthtml/components.pyi +++ b/fasthtml/components.pyi @@ -1,85 +1,85 @@ -def xt_hx(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Html(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Head(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Title(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Meta(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Link(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Style(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Body(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Pre(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Code(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Div(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Span(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def P(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def H1(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def H2(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def H3(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def H4(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def H5(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def H6(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Strong(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Em(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def B(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def I(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def U(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def S(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Strike(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Sub(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Sup(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Hr(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Br(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Img(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Link(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Nav(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Ul(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Ol(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Li(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Dl(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Dt(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Dd(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Table(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Thead(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Tbody(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Tfoot(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Tr(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Th(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Td(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Caption(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Col(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Colgroup(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Form(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Input(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Textarea(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Button(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Select(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Option(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Label(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Fieldset(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Legend(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Details(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Dialog(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Summary(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Main(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Header(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Footer(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Section(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Article(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Aside(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Figure(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Figcaption(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Mark(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Small(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Iframe(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Object(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Embed(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Param(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Video(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Audio(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Source(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Canvas(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Svg(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Math(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Script(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Noscript(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Template(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... -def Slot(tag: str, *c, id=None, cls=None, title=None, style=None, id=None, cls=None, title=None, style=None, hx_get=None, hx_post=None, hx_put=None, hx_delete=None, hx_patch=None, hx_trigger=None, hx_target=None, hx_swap=None, hx_include=None, hx_select=None, hx_indicator=None, hx_push_url=None, hx_confirm=None, hx_disable=None, hx_replace_url=None, hx_on=None, **kwargs): ... +def xt_hx(tag: str, *c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Html(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Head(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Title(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Meta(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Link(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Style(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Body(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Pre(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Code(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Div(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Span(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def P(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def H1(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def H2(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def H3(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def H4(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def H5(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def H6(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Strong(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Em(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def B(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def I(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def U(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def S(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Strike(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Sub(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Sup(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Hr(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Br(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Img(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Link(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Nav(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Ul(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Ol(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Li(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Dl(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Dt(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Dd(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Table(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Thead(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Tbody(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Tfoot(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Tr(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Th(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Td(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Caption(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Col(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Colgroup(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Form(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Input(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Textarea(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Button(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Select(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Option(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Label(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Fieldset(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Legend(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Details(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Dialog(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Summary(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Main(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Header(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Footer(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Section(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Article(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Aside(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Figure(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Figcaption(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Mark(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Small(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Iframe(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Object(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Embed(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Param(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Video(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Audio(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Source(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Canvas(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Svg(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Math(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Script(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Noscript(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Template(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... +def Slot(*c, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, id:str|None=None, cls:str|None=None, title:str|None=None, style:str|None=None, hx_get:str|None=None, hx_post:str|None=None, hx_put:str|None=None, hx_delete:str|None=None, hx_patch:str|None=None, hx_trigger:str|None=None, hx_target:str|None=None, hx_swap:str|None=None, hx_include:str|None=None, hx_select:str|None=None, hx_indicator:str|None=None, hx_push_url:str|None=None, hx_confirm:str|None=None, hx_disable:str|None=None, hx_replace_url:str|None=None, hx_on:str|None=None, **kwargs): ... diff --git a/fasthtml/core.py b/fasthtml/core.py index 6f3c24e5..6cd131bc 100644 --- a/fasthtml/core.py +++ b/fasthtml/core.py @@ -1,7 +1,7 @@ # AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/00_core.ipynb. # %% auto 0 -__all__ = ['empty', 'date', 'snake2hyphens', 'RouteX', 'FastHTML', 'reg_re_param'] +__all__ = ['empty', 'htmx_hdrs', 'date', 'snake2hyphens', 'RouteX', 'RouterX', 'FastHTML', 'reg_re_param'] # %% ../nbs/00_core.ipynb 2 import json, dateutil @@ -9,7 +9,7 @@ from fastcore.utils import * from fastcore.xml import * -from types import UnionType +from types import UnionType, SimpleNamespace as ns from typing import Optional, get_type_hints, get_args, get_origin, Union, Mapping from datetime import datetime from dataclasses import dataclass,fields,is_dataclass,MISSING,asdict @@ -17,7 +17,7 @@ from functools import wraps, partialmethod from starlette.applications import Starlette -from starlette.routing import Route, Mount +from starlette.routing import Route, Mount, Router from starlette.responses import Response, HTMLResponse, FileResponse, JSONResponse from starlette.requests import Request from starlette.staticfiles import StaticFiles @@ -25,10 +25,10 @@ from starlette._utils import is_async_callable from starlette.convertors import Convertor, StringConvertor, register_url_convertor, CONVERTOR_TYPES -# %% ../nbs/00_core.ipynb 5 +# %% ../nbs/00_core.ipynb 4 empty = Parameter.empty -# %% ../nbs/00_core.ipynb 6 +# %% ../nbs/00_core.ipynb 5 def _wrap_resp(resp, cls): if isinstance(resp, Response): return resp if cls is not empty: return cls(resp) @@ -40,7 +40,7 @@ def _wrap_resp(resp, cls): cls = HTMLResponse return cls(resp) -# %% ../nbs/00_core.ipynb 7 +# %% ../nbs/00_core.ipynb 6 def _fix_anno(t): origin = get_origin(t) if origin is Union or origin is UnionType: @@ -48,10 +48,10 @@ def _fix_anno(t): if t==bool: return str2bool return t -# %% ../nbs/00_core.ipynb 8 +# %% ../nbs/00_core.ipynb 7 def date(s): return dateutil.parser.parse(s) -# %% ../nbs/00_core.ipynb 9 +# %% ../nbs/00_core.ipynb 8 def _form_arg(fld, body): res = body.get(fld.name, None) if not res: res = fld.default @@ -60,19 +60,38 @@ def _form_arg(fld, body): if res is not None: res = anno(res) return res -# %% ../nbs/00_core.ipynb 10 +# %% ../nbs/00_core.ipynb 9 async def _from_body(req, arg, p): body = await req.form() cargs = {o.name:_form_arg(o, body) for o in fields(p.annotation)} return p.annotation(**cargs) -# %% ../nbs/00_core.ipynb 11 +# %% ../nbs/00_core.ipynb 10 def snake2hyphens(s): s = snake2camel(s) return camel2words(s, '-') +# %% ../nbs/00_core.ipynb 11 +htmx_hdrs = dict( + boosted="HX-Boosted", + current_url="HX-Current-URL", + history_restore_request="HX-History-Restore-Request", + prompt="HX-Prompt", + request="HX-Request", + target="HX-Target", + trigger_name="HX-Trigger-Name", + trigger="HX-Trigger") + +def _get_htmx(req): + res = {k:req.headers.get(v.lower(), None) for k,v in htmx_hdrs.items()} + return ns(**res) if res else None + # %% ../nbs/00_core.ipynb 12 async def _find_p(req, arg:str, p): + if p.annotation is empty: + if 'request'.startswith(arg.lower()): return req + if arg.lower()=='htmx': return _get_htmx(req) + return None if is_dataclass(p.annotation): return await _from_body(req, arg, p) res = req.path_params.get(arg, None) if not res: res = req.query_params.get(arg, None) @@ -86,10 +105,11 @@ async def _find_p(req, arg:str, p): # %% ../nbs/00_core.ipynb 13 async def _wrap_req(req, params): - items = [(k,v) for k,v in params.items() - if v.annotation is not empty or v.default is not empty] - if len(params)==1 and not items: return [req] - return [await _find_p(req, arg, p) for arg,p in items] + if not params: return [] +# items = [(k,v) for k,v in params.items() +# if v.annotation is not empty or v.default is not empty] +# if len(params)==1 and not items: return [req] + return [await _find_p(req, arg, p) for arg,p in params.items()] # %% ../nbs/00_core.ipynb 14 def _wrap_ep(f): @@ -112,28 +132,29 @@ def __init__(self, path, endpoint, *args, **kw): super().__init__(path, ep, *args, **kw) # %% ../nbs/00_core.ipynb 16 -class FastHTML: - def __init__(self): self.rd = {} - - async def __call__(self, scope, recv, send): - routes = list(self.rd.values()) - app = Starlette(debug=True, routes=routes) - return await app(scope, recv, send) - - def add_route(self, route): - meth = first(route.methods) - self.rd[(route.path,meth)] = route - - def route(self, path, meth='GET'): - def _inner(f): - self.add_route(RouteX(path, f, methods=[meth])) - return f - return _inner +class RouterX(Router): + def add_route( self, path: str, endpoint: callable, methods=None, name=None, include_in_schema=True): + route = RouteX(path, endpoint=endpoint, methods=methods, name=name, include_in_schema=include_in_schema) + self.routes.append(route) + +# %% ../nbs/00_core.ipynb 17 +class FastHTML(Starlette): + def __init__(self, debug=False, routes=None, middleware=None, exception_handlers=None, + on_startup=None, on_shutdown=None, lifespan=None): + super().__init__(debug, routes, middleware, exception_handlers, on_startup, on_shutdown, lifespan=lifespan) + self.router = RouterX(routes, on_startup=on_startup, on_shutdown=on_shutdown, lifespan=lifespan) + + def route(self, path:str, methods=None, name=None, include_in_schema=True): + if isinstance(methods,str): methods=[methods] + def f(func): + self.router.add_route(path, func, methods=methods, name=name, include_in_schema=include_in_schema) + return func + return f for o in 'get post put delete patch head trace options'.split(): - setattr(FastHTML, o, partialmethod(FastHTML.route, meth=o.capitalize())) + setattr(FastHTML, o, partialmethod(FastHTML.route, methods=o.capitalize())) -# %% ../nbs/00_core.ipynb 17 +# %% ../nbs/00_core.ipynb 18 def reg_re_param(m, s): cls = get_class(f'{m}Conv', sup=StringConvertor, regex=s) register_url_convertor(m, cls()) diff --git a/nbs/00_core.ipynb b/nbs/00_core.ipynb index 8a04d3cf..020fe7da 100644 --- a/nbs/00_core.ipynb +++ b/nbs/00_core.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "8656ed20", "metadata": {}, "outputs": [], @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "0c0c2292", "metadata": {}, "outputs": [], @@ -31,7 +31,7 @@ "from fastcore.utils import *\n", "from fastcore.xml import *\n", "\n", - "from types import UnionType\n", + "from types import UnionType, SimpleNamespace as ns\n", "from typing import Optional, get_type_hints, get_args, get_origin, Union, Mapping\n", "from datetime import datetime\n", "from dataclasses import dataclass,fields,is_dataclass,MISSING,asdict\n", @@ -39,7 +39,7 @@ "from functools import wraps, partialmethod\n", "\n", "from starlette.applications import Starlette\n", - "from starlette.routing import Route, Mount\n", + "from starlette.routing import Route, Mount, Router\n", "from starlette.responses import Response, HTMLResponse, FileResponse, JSONResponse\n", "from starlette.requests import Request\n", "from starlette.staticfiles import StaticFiles\n", @@ -50,7 +50,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "5f824904", "metadata": {}, "outputs": [], @@ -64,18 +64,7 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "387680de", - "metadata": {}, - "outputs": [], - "source": [ - "# if 'HX-Request' not in request.headers:\n", - "# resp = wrap_root(resp, self.headtags)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "f0aea6a8", "metadata": {}, "outputs": [], @@ -86,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "3e4eab18", "metadata": {}, "outputs": [], @@ -106,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "406b0dd1", "metadata": {}, "outputs": [], @@ -122,7 +111,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "6f518ca5", "metadata": {}, "outputs": [], @@ -133,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "999aba2b", "metadata": {}, "outputs": [], @@ -150,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "7826389e", "metadata": {}, "outputs": [], @@ -164,7 +153,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "b2d44106", "metadata": {}, "outputs": [], @@ -177,13 +166,40 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, + "id": "490eb390", + "metadata": {}, + "outputs": [], + "source": [ + "#| export\n", + "htmx_hdrs = dict(\n", + " boosted=\"HX-Boosted\",\n", + " current_url=\"HX-Current-URL\",\n", + " history_restore_request=\"HX-History-Restore-Request\",\n", + " prompt=\"HX-Prompt\",\n", + " request=\"HX-Request\",\n", + " target=\"HX-Target\",\n", + " trigger_name=\"HX-Trigger-Name\",\n", + " trigger=\"HX-Trigger\")\n", + "\n", + "def _get_htmx(req):\n", + " res = {k:req.headers.get(v.lower(), None) for k,v in htmx_hdrs.items()}\n", + " return ns(**res) if res else None" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "ecaf2762", "metadata": {}, "outputs": [], "source": [ "#| export\n", "async def _find_p(req, arg:str, p):\n", + " if p.annotation is empty:\n", + " if 'request'.startswith(arg.lower()): return req\n", + " if arg.lower()=='htmx': return _get_htmx(req)\n", + " return None\n", " if is_dataclass(p.annotation): return await _from_body(req, arg, p)\n", " res = req.path_params.get(arg, None)\n", " if not res: res = req.query_params.get(arg, None)\n", @@ -198,22 +214,23 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "bd602fc8", "metadata": {}, "outputs": [], "source": [ "#| export\n", "async def _wrap_req(req, params):\n", - " items = [(k,v) for k,v in params.items()\n", - " if v.annotation is not empty or v.default is not empty]\n", - " if len(params)==1 and not items: return [req]\n", - " return [await _find_p(req, arg, p) for arg,p in items]" + " if not params: return []\n", + "# items = [(k,v) for k,v in params.items()\n", + "# if v.annotation is not empty or v.default is not empty]\n", + "# if len(params)==1 and not items: return [req]\n", + " return [await _find_p(req, arg, p) for arg,p in params.items()]" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "9c0b553d", "metadata": {}, "outputs": [], @@ -235,7 +252,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "69d1b7d2", "metadata": {}, "outputs": [], @@ -249,37 +266,46 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, + "id": "ef058280", + "metadata": {}, + "outputs": [], + "source": [ + "#| export\n", + "class RouterX(Router):\n", + " def add_route( self, path: str, endpoint: callable, methods=None, name=None, include_in_schema=True):\n", + " route = RouteX(path, endpoint=endpoint, methods=methods, name=name, include_in_schema=include_in_schema)\n", + " self.routes.append(route)" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "5658e557", "metadata": {}, "outputs": [], "source": [ "#| export\n", - "class FastHTML:\n", - " def __init__(self): self.rd = {}\n", - "\n", - " async def __call__(self, scope, recv, send):\n", - " routes = list(self.rd.values())\n", - " app = Starlette(debug=True, routes=routes)\n", - " return await app(scope, recv, send)\n", + "class FastHTML(Starlette):\n", + " def __init__(self, debug=False, routes=None, middleware=None, exception_handlers=None,\n", + " on_startup=None, on_shutdown=None, lifespan=None):\n", + " super().__init__(debug, routes, middleware, exception_handlers, on_startup, on_shutdown, lifespan=lifespan)\n", + " self.router = RouterX(routes, on_startup=on_startup, on_shutdown=on_shutdown, lifespan=lifespan)\n", "\n", - " def add_route(self, route):\n", - " meth = first(route.methods)\n", - " self.rd[(route.path,meth)] = route\n", - " \n", - " def route(self, path, meth='GET'):\n", - " def _inner(f):\n", - " self.add_route(RouteX(path, f, methods=[meth]))\n", - " return f\n", - " return _inner\n", + " def route(self, path:str, methods=None, name=None, include_in_schema=True):\n", + " if isinstance(methods,str): methods=[methods]\n", + " def f(func):\n", + " self.router.add_route(path, func, methods=methods, name=name, include_in_schema=include_in_schema)\n", + " return func\n", + " return f\n", "\n", "for o in 'get post put delete patch head trace options'.split():\n", - " setattr(FastHTML, o, partialmethod(FastHTML.route, meth=o.capitalize()))" + " setattr(FastHTML, o, partialmethod(FastHTML.route, methods=o.capitalize()))" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "d37b1814", "metadata": {}, "outputs": [], @@ -293,43 +319,6 @@ "reg_re_param(\"path\", \".*?\")" ] }, - { - "cell_type": "code", - "execution_count": 3, - "id": "420d2107", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"\\nclass NotFoundException(HTTPException):\\n def __init__(self): return super().__init__(404)\\n\\nasync def not_found(request: Request, exc: NotFoundException):\\n return HTMLResponse(content='not found', status_code=exc.status_code)\\n\\nexception_handlers = { NotFoundException: not_found }\\n\\nrt = Router(headtags=[htmxscr, picocss])\\n\\ndef wrap_root(resp, headtags):\\n title = Title('Page')\\n if isinstance(resp, tuple): title,resp = resp\\n return Html(Head(title, *headtags), resp)\\n\"" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "\"\"\"\n", - "class NotFoundException(HTTPException):\n", - " def __init__(self): return super().__init__(404)\n", - "\n", - "async def not_found(request: Request, exc: NotFoundException):\n", - " return HTMLResponse(content='not found', status_code=exc.status_code)\n", - "\n", - "exception_handlers = { NotFoundException: not_found }\n", - "\n", - "rt = Router(headtags=[htmxscr, picocss])\n", - "\n", - "def wrap_root(resp, headtags):\n", - " title = Title('Page')\n", - " if isinstance(resp, tuple): title,resp = resp\n", - " return Html(Head(title, *headtags), resp)\n", - "\"\"\"\n" - ] - }, { "cell_type": "markdown", "id": "474e14b4", @@ -340,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "d211e8e2", "metadata": {}, "outputs": [], @@ -360,21 +349,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "python3", "language": "python", "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.8" } }, "nbformat": 4, diff --git a/nbs/01_components.ipynb b/nbs/01_components.ipynb index efd13f68..33d3c056 100644 --- a/nbs/01_components.ipynb +++ b/nbs/01_components.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "56db45b6", "metadata": {}, "outputs": [], @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "8e2d405b", "metadata": {}, "outputs": [], @@ -39,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "3ccb463a", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "ad9c6bf2", "metadata": {}, "outputs": [], @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "0ff9acc3", "metadata": {}, "outputs": [], @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "c8ade6b4", "metadata": {}, "outputs": [], @@ -91,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "d5158b3d", "metadata": {}, "outputs": [], @@ -105,7 +105,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "ede9b44d", "metadata": {}, "outputs": [], @@ -127,19 +127,19 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "38cbc02e", "metadata": {}, "outputs": [], "source": [ "#| hide\n", "both_attrs = html_attrs+hx_attrs\n", - "attrs_str = ', '.join(f'{t}=None' for t in both_attrs)\n", + "attrs_str = ', '.join(f'{t}:str|None=None' for t in both_attrs)\n", "\n", "with open('../fasthtml/components.pyi', 'w') as f:\n", " f.write(f\"def xt_hx(tag: str, *c, {attrs_str}, **kwargs): ...\\n\")\n", " for o in _all_:\n", - " f.write(f\"def {o}(tag: str, *c, {attrs_str}, **kwargs): ...\\n\")" + " f.write(f\"def {o}(*c, {attrs_str}, **kwargs): ...\\n\")" ] }, { @@ -152,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "ecbcfa18", "metadata": {}, "outputs": [ @@ -172,7 +172,7 @@ " {'hx-post': '/', 'hx-target': '#tgt', 'id': 'frm', 'name': 'frm'}]" ] }, - "execution_count": 9, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -184,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "0e5a0e2e", "metadata": {}, "outputs": [], @@ -199,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "60172692", "metadata": {}, "outputs": [], @@ -217,7 +217,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "f0c83f26", "metadata": {}, "outputs": [], @@ -236,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "caef04d9", "metadata": {}, "outputs": [ @@ -273,7 +273,7 @@ " {}]" ] }, - "execution_count": 13, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -291,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "8b171490", "metadata": {}, "outputs": [], @@ -305,7 +305,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "77e3f785", "metadata": {}, "outputs": [ @@ -315,7 +315,7 @@ "TodoItem(title='Profit', id=2, done=True)" ] }, - "execution_count": 15, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -328,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "f33b9eea", "metadata": {}, "outputs": [], @@ -349,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "8439d070", "metadata": {}, "outputs": [], @@ -364,7 +364,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "f6d33549", "metadata": {}, "outputs": [ @@ -374,7 +374,7 @@ "['Profit']" ] }, - "execution_count": 18, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -385,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "e551de91", "metadata": {}, "outputs": [ @@ -395,7 +395,7 @@ "['Profit']" ] }, - "execution_count": 21, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -415,7 +415,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "d211e8e2", "metadata": {}, "outputs": [], @@ -435,21 +435,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "python3", "language": "python", "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.8" } }, "nbformat": 4, diff --git a/nbs/02_xtend.ipynb b/nbs/02_xtend.ipynb index fd9769b5..007911ed 100644 --- a/nbs/02_xtend.ipynb +++ b/nbs/02_xtend.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "56db45b6", "metadata": {}, "outputs": [], @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "8e2d405b", "metadata": {}, "outputs": [], @@ -40,7 +40,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "100414ae", "metadata": {}, "outputs": [], @@ -62,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "992c2a8f", "metadata": {}, "outputs": [ @@ -75,7 +75,7 @@ "" ] }, - "execution_count": 4, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -86,7 +86,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "36d26fb7", "metadata": {}, "outputs": [], @@ -122,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "74326ab8", "metadata": {}, "outputs": [ @@ -150,7 +150,7 @@ "" ] }, - "execution_count": 6, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -161,7 +161,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "8aebeecc", "metadata": {}, "outputs": [], @@ -174,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "53efcd61", "metadata": {}, "outputs": [ @@ -192,7 +192,7 @@ "['a', ('text',), {'href': '#', 'ht-get': '/get', 'hx-target': '#id'}]" ] }, - "execution_count": 8, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -203,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "3f0bd0fa", "metadata": {}, "outputs": [], @@ -216,7 +216,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "2531e3fc", "metadata": {}, "outputs": [ @@ -234,7 +234,7 @@ "['a', ('text',), {'href': '#', 'hx-get': '/get', 'hx-target': '#id'}]" ] }, - "execution_count": 10, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -245,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "430aa9d9", "metadata": {}, "outputs": [], @@ -261,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "3d9e3af6", "metadata": {}, "outputs": [ @@ -277,7 +277,7 @@ "" ] }, - "execution_count": 12, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -288,7 +288,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "ad99a758", "metadata": {}, "outputs": [], @@ -303,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "d74cd6e3", "metadata": {}, "outputs": [ @@ -328,7 +328,7 @@ "" ] }, - "execution_count": 14, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -339,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "6108b84c", "metadata": {}, "outputs": [], @@ -352,7 +352,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "af029bf2", "metadata": {}, "outputs": [ @@ -370,7 +370,7 @@ "" ] }, - "execution_count": 16, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -381,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "e12b6a7c", "metadata": {}, "outputs": [], @@ -394,7 +394,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "a9c38825", "metadata": {}, "outputs": [ @@ -412,7 +412,7 @@ "" ] }, - "execution_count": 18, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -423,7 +423,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "24c4843f", "metadata": {}, "outputs": [], @@ -437,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "0f13c619", "metadata": {}, "outputs": [ @@ -454,7 +454,7 @@ "" ] }, - "execution_count": 20, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -466,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "252a9f5f", "metadata": {}, "outputs": [], @@ -480,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": null, "id": "9dccbc6a", "metadata": {}, "outputs": [], @@ -493,7 +493,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "id": "461bcf58", "metadata": {}, "outputs": [], @@ -514,7 +514,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "id": "d211e8e2", "metadata": {}, "outputs": [], @@ -534,21 +534,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "python3", "language": "python", "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.8" } }, "nbformat": 4, diff --git a/nbs/index.ipynb b/nbs/index.ipynb index 3461ad84..754faae3 100644 --- a/nbs/index.ipynb +++ b/nbs/index.ipynb @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -69,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -87,7 +87,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -128,7 +128,7 @@ "" ] }, - "execution_count": 5, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -148,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -157,7 +157,7 @@ "'Good day to you, Jeremy!'" ] }, - "execution_count": 6, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -175,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -189,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -198,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -217,7 +217,7 @@ "" ] }, - "execution_count": 9, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -242,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -254,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -263,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -278,14 +278,14 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{\"type\":\"http\",\"http_version\":\"1.1\",\"method\":\"GET\",\"path\":\"/\",\"raw_path\":\"b'/'\",\"root_path\":\"\",\"scheme\":\"http\",\"query_string\":\"b''\",\"headers\":\"[(b'host', b'testserver'), (b'accept', b'*/*'), (b'accept-encoding', b'gzip, deflate, br'), (b'connection', b'keep-alive'), (b'user-agent', b'testclient')]\",\"client\":\"['testclient', 50000]\",\"server\":\"['testserver', 80]\",\"extensions\":\"{'http.response.debug': {}}\",\"state\":\"{}\",\"app\":\"\",\"starlette.exception_handlers\":\"({: >, : >}, {})\",\"router\":\"\",\"endpoint\":\"._f at 0x129bef6a0>\",\"path_params\":\"{}\"}\n" + "{\"type\":\"http\",\"http_version\":\"1.1\",\"method\":\"GET\",\"path\":\"/\",\"raw_path\":\"b'/'\",\"root_path\":\"\",\"scheme\":\"http\",\"query_string\":\"b''\",\"headers\":\"[(b'host', b'testserver'), (b'accept', b'*/*'), (b'accept-encoding', b'gzip, deflate, br'), (b'connection', b'keep-alive'), (b'user-agent', b'testclient')]\",\"client\":\"['testclient', 50000]\",\"server\":\"['testserver', 80]\",\"extensions\":\"{'http.response.debug': {}}\",\"state\":\"{}\",\"app\":\"\",\"starlette.exception_handlers\":\"({: >, : >}, {})\",\"router\":\"\",\"endpoint\":\"._f>\",\"path_params\":\"{}\"}\n" ] } ], @@ -297,7 +297,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -306,7 +306,7 @@ "'Good day to you, jph!'" ] }, - "execution_count": 128, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -317,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -331,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -350,7 +350,7 @@ "" ] }, - "execution_count": 130, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -361,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 131, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -373,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 132, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -382,7 +382,7 @@ "'Getting jph.ico from /foo/'" ] }, - "execution_count": 132, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -393,7 +393,7 @@ }, { "cell_type": "code", - "execution_count": 133, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -409,7 +409,7 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -426,7 +426,7 @@ }, { "cell_type": "code", - "execution_count": 135, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -443,7 +443,7 @@ }, { "cell_type": "code", - "execution_count": 136, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -455,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 137, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -472,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 138, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -489,7 +489,7 @@ }, { "cell_type": "code", - "execution_count": 139, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -499,7 +499,7 @@ }, { "cell_type": "code", - "execution_count": 140, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -517,7 +517,7 @@ }, { "cell_type": "code", - "execution_count": 141, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -534,7 +534,7 @@ }, { "cell_type": "code", - "execution_count": 142, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -544,7 +544,7 @@ }, { "cell_type": "code", - "execution_count": 143, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -563,7 +563,7 @@ }, { "cell_type": "code", - "execution_count": 144, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -574,7 +574,7 @@ }, { "cell_type": "code", - "execution_count": 145, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -587,7 +587,7 @@ }, { "cell_type": "code", - "execution_count": 146, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -596,7 +596,7 @@ "'{\"a\":1,\"b\":\"foo\",\"nm\":\"me\"}'" ] }, - "execution_count": 146, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -607,7 +607,7 @@ }, { "cell_type": "code", - "execution_count": 147, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -621,16 +621,16 @@ }, { "cell_type": "code", - "execution_count": 148, + "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'Set to 2024-05-19 01:33:57.762263'" + "'Set to 2024-05-26 01:31:12.629498'" ] }, - "execution_count": 148, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -641,7 +641,7 @@ }, { "cell_type": "code", - "execution_count": 149, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -651,16 +651,16 @@ }, { "cell_type": "code", - "execution_count": 150, + "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'Cookie was set at time 01:33:57.762263'" + "'Cookie was set at time 01:31:12.629498'" ] }, - "execution_count": 150, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -671,7 +671,7 @@ }, { "cell_type": "code", - "execution_count": 151, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -681,7 +681,7 @@ }, { "cell_type": "code", - "execution_count": 152, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -690,7 +690,7 @@ "'FastHTML'" ] }, - "execution_count": 152, + "execution_count": null, "metadata": {}, "output_type": "execute_result" } @@ -699,6 +699,43 @@ "cli.get('/ua', headers={'User-Agent':'FastHTML'}).text" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@app.get(\"/hxtest\")\n", + "def hxtest(htmx): return htmx.request" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'1'" + ] + }, + "execution_count": null, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cli.get('/hxtest', headers={'HX-Request':'1'}).text" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## fin -" + ] + }, { "cell_type": "code", "execution_count": null, @@ -709,21 +746,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "python3", "language": "python", "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.8" } }, "nbformat": 4,