@@ -15,14 +15,15 @@ import {DefaultFocusState as DefaultFocusStateEnum} from '@material/menu/constan
1515import MDCMenuFoundation from '@material/menu/foundation.js' ;
1616import { BaseElement } from '@material/mwc-base/base-element.js' ;
1717import { observer } from '@material/mwc-base/observer.js' ;
18- import { List , MWCListIndex } from '@material/mwc-list/mwc-list.js' ;
1918import { ActionDetail } from '@material/mwc-list/mwc-list-foundation.js' ;
2019import { ListItemBase } from '@material/mwc-list/mwc-list-item-base.js' ;
20+ import { List , MWCListIndex } from '@material/mwc-list/mwc-list.js' ;
2121import { html } from 'lit' ;
2222import { property , query } from 'lit/decorators.js' ;
23+ import { classMap } from 'lit/directives/class-map.js' ;
2324
24- import { MenuSurface } from './mwc-menu-surface.js' ;
2525import { Corner , MenuCorner } from './mwc-menu-surface-base.js' ;
26+ import { MenuSurface } from './mwc-menu-surface.js' ;
2627
2728export { ActionDetail , createSetFromIndex , isEventMulti , isIndexSet , MWCListIndex , SelectedDetail } from '@material/mwc-list/mwc-list-foundation.js' ;
2829export { Corner , MenuCorner } from './mwc-menu-surface-base.js' ;
@@ -131,39 +132,63 @@ export abstract class MenuBase extends BaseElement {
131132 }
132133
133134 override render ( ) {
134- const itemRoles = this . innerRole === 'menu' ? 'menuitem' : 'option' ;
135+ return this . renderSurface ( ) ;
136+ }
135137
138+ protected renderSurface ( ) {
139+ const classes = this . getSurfaceClasses ( ) ;
136140 return html `
137141 < mwc-menu-surface
138- ?hidden =${ ! this . open }
139- .anchor =${ this . anchor }
140- .open=${ this . open }
141- .quick=${ this . quick }
142- .corner=${ this . corner }
143- .x=${ this . x }
144- .y=${ this . y }
145- .absolute=${ this . absolute }
146- .fixed=${ this . fixed }
147- .fullwidth=${ this . fullwidth }
148- .menuCorner=${ this . menuCorner }
149- ?stayOpenOnBodyClick=${ this . stayOpenOnBodyClick }
150- class="mdc-menu mdc-menu-surface"
151- @closed=${ this . onClosed }
152- @opened=${ this . onOpened }
153- @keydown=${ this . onKeydown } >
154- < mwc-list
142+ ?hidden =${ ! this . open }
143+ .anchor =${ this . anchor }
144+ .open=${ this . open }
145+ .quick=${ this . quick }
146+ .corner=${ this . corner }
147+ .x=${ this . x }
148+ .y=${ this . y }
149+ .absolute=${ this . absolute }
150+ .fixed=${ this . fixed }
151+ .fullwidth=${ this . fullwidth }
152+ .menuCorner=${ this . menuCorner }
153+ ?stayOpenOnBodyClick=${ this . stayOpenOnBodyClick }
154+ class=${ classMap ( classes ) }
155+ @closed=${ this . onClosed }
156+ @opened=${ this . onOpened }
157+ @keydown=${ this . onKeydown } >
158+ ${ this . renderList ( ) }
159+ </ mwc-menu-surface > ` ;
160+ }
161+
162+ protected getSurfaceClasses ( ) {
163+ return {
164+ 'mdc-menu' : true ,
165+ 'mdc-menu-surface' : true ,
166+ } ;
167+ }
168+
169+ protected renderList ( ) {
170+ const itemRoles = this . innerRole === 'menu' ? 'menuitem' : 'option' ;
171+ const classes = this . renderListClasses ( ) ;
172+
173+ return html `
174+ < mwc-list
155175 rootTabbable
156176 .innerAriaLabel =${ this . innerAriaLabel }
157177 .innerRole =${ this . innerRole }
158178 .multi=${ this . multi }
159- class="mdc-deprecated-list"
179+ class=${ classMap ( classes ) }
160180 .itemRoles=${ itemRoles }
161181 .wrapFocus=${ this . wrapFocus }
162182 .activatable=${ this . activatable }
163183 @action=${ this . onAction } >
164184 < slot > </ slot >
165- </ mwc-list >
166- </ mwc-menu-surface > ` ;
185+ </ mwc-list > ` ;
186+ }
187+
188+ protected renderListClasses ( ) {
189+ return {
190+ 'mdc-deprecated-list' : true ,
191+ } ;
167192 }
168193
169194 protected createAdapter ( ) : MDCMenuAdapter {
@@ -263,7 +288,7 @@ export abstract class MenuBase extends BaseElement {
263288
264289 return - 1 ;
265290 } ,
266- notifySelected : ( ) => { /** handled by list */ } ,
291+ notifySelected : ( ) => { /** handled by list */ } ,
267292 getMenuItemCount : ( ) => {
268293 const listElement = this . listElement ;
269294 if ( ! listElement ) {
0 commit comments