Skip to content

Commit 319bbc6

Browse files
committed
Navbar responsiveness
1 parent 0ec6cc4 commit 319bbc6

File tree

2 files changed

+40
-15
lines changed

2 files changed

+40
-15
lines changed

app.py

+39-14
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,60 @@
22
from fasthtml.common import *
33
from functools import partial
44
from monsterui.all import *
5-
from fasthtml.components import Uk_theme_switcher
5+
import fasthtml.common as fh
6+
from monsterui.foundations import *
7+
68
_A = partial(A, target='_blank')
79
def Markdown(s, **kw): return Div(render_md(s, class_map_mods={'ul':'uk-list uk-list-bullet space-y-2 mb-6 ml-6 text-lg'}), **kw)
810

911
ghurl = 'https://github.com/AnswerDotAI/fasthtml'
1012
fhurl = 'https://fastht.ml'
1113
docs = 'https://docs.fastht.ml'
1214

15+
def NavBar(*c, # Component for right side of navbar (Often A tag links)
16+
brand=None, # Brand/logo component for left side
17+
right_items=None,
18+
right_cls='items-center space-x-4', # Spacing for desktop links
19+
mobile_cls='space-y-4', # Spacing for mobile links
20+
cls='p-4', # Classes for navbar
21+
)->FT: # Responsive NavBar
22+
"Creates a responsive navigation bar with mobile menu support"
23+
menu_id = fh.unqid()
24+
mobile_icon = A(UkIcon("menu", width=30, height=30), cls="md:hidden", data_uk_toggle=f"target: #{menu_id}; cls: hidden")
25+
return Div(
26+
Div(DivFullySpaced(
27+
DivLAligned(brand, Div(*c, cls='hidden md:flex space-x-4')), # Brand/logo component for left side
28+
mobile_icon, # Hamburger menu icon
29+
Div(*right_items,cls=(stringify(right_cls),'hidden md:flex'))), # Desktop Navbar
30+
cls=('monster-navbar', stringify(cls))),
31+
DivCentered(*c, *right_items,
32+
cls=(stringify(mobile_cls),stringify(cls),'hidden md:hidden monster-navbar'),
33+
id=menu_id))
34+
35+
36+
def NavLink(*args, cls='', target='_blank', **kw):
37+
return fh.A(*args, cls=(cls,TextT.lg), target=target, **kw)
38+
1339
def BstPage(selidx, title, h2s, *c):
1440
navitems = [('About', '/'), ('Vision', '/vision'), ('Foundations', '/foundation'),
1541
('Technology', '/tech'), ('Components', '/components'), ('Limits', '#', {'disabled':True})]
1642
logo = 'assets/logo.svg'
17-
_NavBarP = partial(P, cls=TextT.lg)
1843
return (
1944
Title(title),
2045
Container(
2146
# NavBar
22-
NavBarContainer(
23-
NavBarLSide(
24-
NavBarNav(
25-
Li(A(Img(src=logo), href=fhurl)),
26-
*[Li(A(_NavBarP(k), href=v), cls='uk-active' if selidx==i else '') for i, (k,v) in enumerate(navitems[:-1])],
27-
Li(A(_NavBarP('Limits', href='#'), disabled=True, uk_tooltip='No limits!')))),
28-
NavBarRSide(
29-
NavBarNav(
30-
Li(A(_NavBarP("Theme"))),DropDownNavContainer(Div(Uk_theme_switcher(), cls='p-6 uk-drop-close'), cls='w-96'),
31-
Li(_A(_NavBarP('Docs'), href=docs)),
32-
Li(_A(_NavBarP(UkIcon('github')), href=ghurl)))),
33-
cls='bg-green-400/70 rounded-lg rounded-tl-3xl shadow-md p-2 px-4'),
47+
NavBar(
48+
*[NavLink(k, href=v, target=None, cls=TextT.bold if selidx==i else '') for i, (k,v) in enumerate(navitems[:-1])],
49+
NavLink('Limits', href='#', disabled=True, uk_tooltip='No limits!', cls=TextT.gray),
50+
brand=A(Img(src=logo), href=fhurl),
51+
right_items=[
52+
NavLink("Theme"), DropDownNavContainer(Div(ThemePicker(font=False, shadows=False, radii=False), cls='p-6 uk-drop-close'), cls='w-96'),
53+
NavLink('Docs', href=docs),
54+
NavLink(UkIcon('github'), href=ghurl),
55+
],
56+
cls='bg-green-400/70 rounded-lg rounded-tl-3xl shadow-md p-2 px-4'
57+
),
58+
3459
# Main Content
3560
Container(
3661
Grid(

main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
twitter_site='@answerdotai', image=f'/assets/og-sq.png', url=''),
1010
)
1111

12-
app,rt = fast_app(pico=False, hdrs=hdrs, live=False)
12+
app,rt = fast_app(hdrs=hdrs)
1313

1414
app.get('/')(overview.page)
1515
app.get('/components')(components.page)

0 commit comments

Comments
 (0)