-module(docs@components@header). -compile([no_auto_import, nowarn_unused_vars]). -export([header/2]). -export_type([menu_item/0, header_props/0, menu_item_props/0]). -type menu_item() :: {menu_item, binary(), binary()}. -type header_props() :: {header_props, list(menu_item())}. -type menu_item_props() :: {menu_item_props, menu_item()}. -spec is_external_href(binary()) -> boolean(). is_external_href(Href) -> gleam@string:starts_with(Href, <<"http://"/utf8>>) orelse gleam@string:starts_with( Href, <<"https://"/utf8>> ). -spec menu_item(sprocket@context:context(), menu_item_props()) -> {sprocket@context:context(), list(sprocket@element:element())}. menu_item(Ctx, Props) -> {menu_item_props, {menu_item, Label, Href}} = Props, Is_external = is_external_href(Href), sprocket@component:render( Ctx, [sprocket@html:a( [sprocket@html@attributes:class( <<"block p-5 border-b-2 border-transparent hover:border-blue-500"/utf8>> ), sprocket@html@attributes:href(Href) | case Is_external of true -> [sprocket@html@attributes:target(<<"_blank"/utf8>>)]; false -> [] end], [sprocket@html:text(Label) | case Is_external of true -> [sprocket@html:span( [sprocket@html@attributes:class( <<"text-gray-500 text-sm ml-2"/utf8>> )], [sprocket@html:i( [sprocket@html@attributes:class( <<"fa-solid fa-arrow-up-right-from-square"/utf8>> )], [] )] )]; false -> [] end] )] ). -spec header(sprocket@context:context(), header_props()) -> {sprocket@context:context(), list(sprocket@element:element())}. header(Ctx, Props) -> {header_props, Menu_items} = Props, sprocket@component:render( Ctx, [sprocket@html:'div'( [sprocket@html@attributes:class( <<"flex flex-row justify-between border-b border-gray-200 dark:border-gray-600 min-h-[60px]"/utf8>> )], [sprocket@html:'div'( [sprocket@html@attributes:class(<<"p-2 mx-2"/utf8>>)], [sprocket@html:'div'( [sprocket@html@attributes:class( <<"italic bold text-2xl"/utf8>> )], [sprocket@html:text(<<"⚙️ Sprocket"/utf8>>)] ), sprocket@html:'div'( [sprocket@html@attributes:class( <<"text-gray-500 text-sm"/utf8>> )], [sprocket@html:text( <<"Real-time server components in Gleam ✨"/utf8>> )] )] ), sprocket@html:'div'( [], gleam@list:map( Menu_items, fun(Item) -> sprocket@component:component( fun menu_item/2, {menu_item_props, Item} ) end ) )] )] ).