11import { consume } from '@lit/context'
2- import { html } from 'lit'
2+ import { html , nothing , TemplateResult } from 'lit'
3+ import { property } from 'lit/decorators.js'
34import { customElement , WebComponent } from '@/lib/components'
45import { authContext , AuthContext , DEFAULT_AUTH_CONTEXT } from '@/lib/auth'
56
@@ -17,13 +18,22 @@ import '~icons/lucide/user'
1718
1819import styles from './Account.styles.css'
1920
21+ export interface AccountMenuItem {
22+ label : string | TemplateResult
23+ href ?: string
24+ onSelected ?( ) : void
25+ }
26+
2027@customElement ( 'solid-ui-account' )
2128export default class Account extends WebComponent {
2229 static styles = styles
2330 static states = {
2431 loggedIn : ( component : Account ) => ! ! component . auth . account ,
2532 }
2633
34+ @property ( { type : Array } )
35+ accessor menuItems : AccountMenuItem [ ] = [ ]
36+
2737 @consume ( { context : authContext , subscribe : true } )
2838 private accessor auth : AuthContext = DEFAULT_AUTH_CONTEXT
2939
@@ -66,6 +76,11 @@ export default class Account extends WebComponent {
6676 < icon-lucide-chevron-down slot ="right-icon "> </ icon-lucide-chevron-down >
6777 </ button >
6878
79+ ${ this . menuItems . map ( menuItem => html `
80+ < solid-ui-menu-item .href =${ menuItem . href ?? nothing } @solid-ui-select =${ ( ) => menuItem . onSelected ?.( ) } >
81+ ${ menuItem . label }
82+ </ solid-ui-menu-item >
83+ ` ) }
6984 < solid-ui-logout-button >
7085 < solid-ui-menu-item slot ="trigger ">
7186 < icon-lucide-log-out slot ="left-icon "> </ icon-lucide-log-out >
0 commit comments