@material/web 1.0.0-pre.3 → 1.0.0-pre.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +41 -41
  3. package/badge/lib/_badge.scss +2 -10
  4. package/button/lib/_elevated-button.scss +5 -30
  5. package/button/lib/_elevation.scss +1 -16
  6. package/button/lib/_filled-button.scss +4 -31
  7. package/button/lib/_icon.scss +1 -0
  8. package/button/lib/_outlined-button.scss +6 -23
  9. package/button/lib/_shared.scss +20 -54
  10. package/button/lib/_text-button.scss +8 -34
  11. package/button/lib/_tonal-button.scss +5 -28
  12. package/button/lib/button.d.ts +2 -0
  13. package/button/lib/button.js +5 -1
  14. package/button/lib/button.js.map +1 -1
  15. package/button/lib/elevated-styles.css.js +1 -1
  16. package/button/lib/elevated-styles.css.js.map +1 -1
  17. package/button/lib/filled-styles.css.js +1 -1
  18. package/button/lib/filled-styles.css.js.map +1 -1
  19. package/button/lib/outlined-styles.css.js +1 -1
  20. package/button/lib/outlined-styles.css.js.map +1 -1
  21. package/button/lib/shared-styles.css.js +1 -1
  22. package/button/lib/shared-styles.css.js.map +1 -1
  23. package/button/lib/text-styles.css.js +1 -1
  24. package/button/lib/text-styles.css.js.map +1 -1
  25. package/button/lib/tonal-styles.css.js +1 -1
  26. package/button/lib/tonal-styles.css.js.map +1 -1
  27. package/checkbox/lib/_checkbox.scss +1 -2
  28. package/checkbox/lib/checkbox-styles.css.js +1 -1
  29. package/checkbox/lib/checkbox-styles.css.js.map +1 -1
  30. package/chips/_assist-chip.scss +6 -0
  31. package/chips/_suggestion-chip.scss +6 -0
  32. package/chips/assist-chip.d.ts +20 -0
  33. package/chips/assist-chip.js +24 -0
  34. package/chips/assist-chip.js.map +1 -0
  35. package/chips/lib/_assist-chip.scss +27 -0
  36. package/chips/lib/_shared.scss +183 -0
  37. package/chips/lib/_suggestion-chip.scss +30 -0
  38. package/chips/lib/assist-chip.d.ts +11 -0
  39. package/chips/lib/assist-chip.js +12 -0
  40. package/chips/lib/assist-chip.js.map +1 -0
  41. package/chips/lib/assist-styles.css.js +9 -0
  42. package/chips/lib/assist-styles.css.js.map +1 -0
  43. package/{list/lib/listitem/list-item-private-styles.scss → chips/lib/assist-styles.scss} +2 -2
  44. package/chips/lib/chip.d.ts +29 -0
  45. package/chips/lib/chip.js +110 -0
  46. package/chips/lib/chip.js.map +1 -0
  47. package/chips/lib/shared-styles.css.js +9 -0
  48. package/chips/lib/shared-styles.css.js.map +1 -0
  49. package/{autocomplete → chips}/lib/shared-styles.scss +1 -1
  50. package/chips/lib/suggestion-chip.d.ts +11 -0
  51. package/chips/lib/suggestion-chip.js +12 -0
  52. package/chips/lib/suggestion-chip.js.map +1 -0
  53. package/chips/lib/suggestion-styles.css.js +9 -0
  54. package/chips/lib/suggestion-styles.css.js.map +1 -0
  55. package/{menu/lib/menuitem/menu-item-private-styles.scss → chips/lib/suggestion-styles.scss} +2 -2
  56. package/chips/suggestion-chip.d.ts +20 -0
  57. package/chips/suggestion-chip.js +24 -0
  58. package/chips/suggestion-chip.js.map +1 -0
  59. package/controller/form-controller.d.ts +1 -1
  60. package/controller/form-controller.js +21 -29
  61. package/controller/form-controller.js.map +1 -1
  62. package/dialog/lib/_dialog.scss +7 -5
  63. package/dialog/lib/_tokens.scss +1 -2
  64. package/dialog/lib/dialog-styles.css.js +1 -1
  65. package/dialog/lib/dialog-styles.css.js.map +1 -1
  66. package/dialog/lib/dialog.js +1 -1
  67. package/dialog/lib/dialog.js.map +1 -1
  68. package/elevation/lib/_elevation.scss +1 -21
  69. package/elevation/lib/elevation-styles.css.js +1 -1
  70. package/elevation/lib/elevation-styles.css.js.map +1 -1
  71. package/fab/lib/_fab-extended.scss +3 -10
  72. package/fab/lib/_fab.scss +0 -3
  73. package/fab/lib/_shared.scss +3 -25
  74. package/fab/lib/fab-extended-styles.css.js +1 -1
  75. package/fab/lib/fab-extended-styles.css.js.map +1 -1
  76. package/fab/lib/fab-shared-styles.css.js +1 -1
  77. package/fab/lib/fab-shared-styles.css.js.map +1 -1
  78. package/fab/lib/fab-shared.d.ts +0 -1
  79. package/fab/lib/fab-shared.js +1 -7
  80. package/fab/lib/fab-shared.js.map +1 -1
  81. package/field/lib/_content.scss +91 -13
  82. package/field/lib/_filled-field.scss +19 -57
  83. package/field/lib/_label.scss +1 -2
  84. package/field/lib/_md-comp-filled-field.scss +123 -64
  85. package/field/lib/_md-comp-outlined-field.scss +100 -59
  86. package/field/lib/_outlined-field.scss +13 -11
  87. package/field/lib/_shared.scss +21 -17
  88. package/field/lib/field.d.ts +6 -2
  89. package/field/lib/field.js +80 -62
  90. package/field/lib/field.js.map +1 -1
  91. package/field/lib/filled-field.d.ts +0 -5
  92. package/field/lib/filled-field.js +2 -41
  93. package/field/lib/filled-field.js.map +1 -1
  94. package/field/lib/filled-styles.css.js +1 -1
  95. package/field/lib/filled-styles.css.js.map +1 -1
  96. package/field/lib/outlined-field.js +1 -1
  97. package/field/lib/outlined-field.js.map +1 -1
  98. package/field/lib/outlined-styles.css.js +1 -1
  99. package/field/lib/outlined-styles.css.js.map +1 -1
  100. package/field/lib/shared-styles.css.js +1 -1
  101. package/field/lib/shared-styles.css.js.map +1 -1
  102. package/focus/lib/_focus-ring.scss +13 -7
  103. package/focus/lib/_md-comp-focus-ring.scss +1 -2
  104. package/focus/lib/focus-ring-styles.css.js +1 -1
  105. package/focus/lib/focus-ring-styles.css.js.map +1 -1
  106. package/icon/lib/_icon.scss +1 -1
  107. package/icon/lib/_md-comp-icon.scss +1 -2
  108. package/icon/lib/icon-styles.css.js +1 -1
  109. package/icon/lib/icon-styles.css.js.map +1 -1
  110. package/iconbutton/lib/_filled-icon-button.scss +1 -12
  111. package/iconbutton/lib/_filled-tonal-icon-button.scss +1 -12
  112. package/iconbutton/lib/_outlined-icon-button.scss +1 -13
  113. package/iconbutton/lib/_shared.scss +10 -6
  114. package/iconbutton/lib/_standard-icon-button.scss +5 -12
  115. package/iconbutton/lib/filled-styles.css.js +1 -1
  116. package/iconbutton/lib/filled-styles.css.js.map +1 -1
  117. package/iconbutton/lib/filled-tonal-styles.css.js +1 -1
  118. package/iconbutton/lib/filled-tonal-styles.css.js.map +1 -1
  119. package/iconbutton/lib/icon-button.js +0 -2
  120. package/iconbutton/lib/icon-button.js.map +1 -1
  121. package/iconbutton/lib/outlined-styles.css.js +1 -1
  122. package/iconbutton/lib/outlined-styles.css.js.map +1 -1
  123. package/iconbutton/lib/shared-styles.css.js +1 -1
  124. package/iconbutton/lib/shared-styles.css.js.map +1 -1
  125. package/iconbutton/lib/standard-styles.css.js +1 -1
  126. package/iconbutton/lib/standard-styles.css.js.map +1 -1
  127. package/list/lib/_list.scss +34 -17
  128. package/list/lib/list-styles.css.js +1 -1
  129. package/list/lib/list-styles.css.js.map +1 -1
  130. package/list/lib/listitem/_list-item.scss +312 -124
  131. package/list/lib/listitem/list-item-styles.css.js +1 -1
  132. package/list/lib/listitem/list-item-styles.css.js.map +1 -1
  133. package/list/lib/listitem/list-item.d.ts +8 -6
  134. package/list/lib/listitem/list-item.js +26 -27
  135. package/list/lib/listitem/list-item.js.map +1 -1
  136. package/list/list-item-link.d.ts +18 -0
  137. package/list/list-item-link.js +19 -2
  138. package/list/list-item-link.js.map +1 -1
  139. package/list/list-item.d.ts +19 -0
  140. package/list/list-item.js +20 -2
  141. package/list/list-item.js.map +1 -1
  142. package/menu/lib/_menu.scss +26 -8
  143. package/menu/lib/menu-styles.css.js +1 -1
  144. package/menu/lib/menu-styles.css.js.map +1 -1
  145. package/menu/lib/menu.d.ts +22 -9
  146. package/menu/lib/menu.js +76 -27
  147. package/menu/lib/menu.js.map +1 -1
  148. package/menu/lib/menuitem/_menu-item.scss +39 -79
  149. package/menu/lib/menuitem/menu-item-styles.css.js +1 -1
  150. package/menu/lib/menuitem/menu-item-styles.css.js.map +1 -1
  151. package/menu/lib/menuitem/menu-item.js +1 -1
  152. package/menu/lib/menuitem/menu-item.js.map +1 -1
  153. package/menu/lib/menuitemlink/menu-item-link.js +2 -1
  154. package/menu/lib/menuitemlink/menu-item-link.js.map +1 -1
  155. package/menu/lib/shared.d.ts +16 -0
  156. package/menu/lib/shared.js +16 -0
  157. package/menu/lib/shared.js.map +1 -1
  158. package/menu/lib/submenuitem/sub-menu-item.d.ts +4 -1
  159. package/menu/lib/submenuitem/sub-menu-item.js +9 -3
  160. package/menu/lib/submenuitem/sub-menu-item.js.map +1 -1
  161. package/menu/lib/surfacePositionController.d.ts +10 -2
  162. package/menu/lib/surfacePositionController.js +6 -2
  163. package/menu/lib/surfacePositionController.js.map +1 -1
  164. package/menu/lib/typeaheadController.d.ts +5 -0
  165. package/menu/lib/typeaheadController.js +7 -3
  166. package/menu/lib/typeaheadController.js.map +1 -1
  167. package/menu/menu-item-link.js +1 -2
  168. package/menu/menu-item-link.js.map +1 -1
  169. package/menu/menu-item.js +2 -3
  170. package/menu/menu-item.js.map +1 -1
  171. package/menu/sub-menu-item.js +1 -2
  172. package/menu/sub-menu-item.js.map +1 -1
  173. package/navigationbar/lib/_navigation-bar.scss +1 -4
  174. package/navigationdrawer/lib/_navigation-drawer-modal.scss +0 -3
  175. package/navigationdrawer/lib/_navigation-drawer.scss +0 -3
  176. package/navigationdrawer/lib/_shared.scss +0 -9
  177. package/navigationtab/lib/_navigation-tab.scss +4 -10
  178. package/navigationtab/lib/navigation-tab-styles.css.js +1 -1
  179. package/navigationtab/lib/navigation-tab-styles.css.js.map +1 -1
  180. package/package.json +1 -1
  181. package/radio/lib/_radio.scss +1 -2
  182. package/radio/lib/radio-styles.css.js +1 -1
  183. package/radio/lib/radio-styles.css.js.map +1 -1
  184. package/segmentedbutton/lib/_shared.scss +0 -2
  185. package/segmentedbuttonset/lib/outlined-styles.css.js +1 -1
  186. package/segmentedbuttonset/lib/outlined-styles.css.js.map +1 -1
  187. package/slider/lib/_slider.scss +1 -4
  188. package/slider/lib/_tokens.scss +2 -8
  189. package/slider/lib/slider-styles.css.js +1 -1
  190. package/slider/lib/slider-styles.css.js.map +1 -1
  191. package/textfield/lib/_filled-text-field.scss +99 -103
  192. package/textfield/lib/_icon.scss +11 -55
  193. package/textfield/lib/_input.scss +4 -6
  194. package/textfield/lib/_outlined-text-field.scss +88 -95
  195. package/textfield/lib/filled-styles.css.js +1 -1
  196. package/textfield/lib/filled-styles.css.js.map +1 -1
  197. package/textfield/lib/outlined-styles.css.js +1 -1
  198. package/textfield/lib/outlined-styles.css.js.map +1 -1
  199. package/textfield/lib/shared-styles.css.js +1 -1
  200. package/textfield/lib/shared-styles.css.js.map +1 -1
  201. package/tokens/_index.scss +101 -2
  202. package/tokens/_md-comp-assist-chip.scss +68 -0
  203. package/tokens/_md-comp-badge.scss +34 -0
  204. package/tokens/_md-comp-banner.scss +23 -0
  205. package/tokens/_md-comp-bottom-app-bar.scss +21 -0
  206. package/tokens/_md-comp-carousel-item.scss +23 -0
  207. package/tokens/_md-comp-checkbox.scss +21 -0
  208. package/tokens/_md-comp-circular-progress-indicator.scss +22 -0
  209. package/tokens/_md-comp-data-table.scss +23 -0
  210. package/tokens/_md-comp-date-input-modal.scss +23 -0
  211. package/tokens/_md-comp-date-picker-docked.scss +25 -0
  212. package/tokens/_md-comp-date-picker-modal.scss +25 -0
  213. package/tokens/_md-comp-dialog.scss +43 -0
  214. package/tokens/_md-comp-divider.scss +17 -0
  215. package/tokens/_md-comp-elevated-button.scss +58 -0
  216. package/tokens/_md-comp-elevated-card.scss +23 -0
  217. package/tokens/_md-comp-extended-fab-branded.scss +38 -0
  218. package/tokens/_md-comp-extended-fab-primary.scss +38 -0
  219. package/tokens/_md-comp-extended-fab-secondary.scss +41 -0
  220. package/tokens/_md-comp-extended-fab-surface.scss +38 -0
  221. package/tokens/_md-comp-extended-fab-tertiary.scss +41 -0
  222. package/tokens/_md-comp-fab-branded-large.scss +23 -0
  223. package/tokens/_md-comp-fab-branded.scss +23 -0
  224. package/tokens/_md-comp-fab-primary-large.scss +23 -0
  225. package/tokens/_md-comp-fab-primary-small.scss +23 -0
  226. package/tokens/_md-comp-fab-primary.scss +23 -0
  227. package/tokens/_md-comp-fab-secondary-large.scss +23 -0
  228. package/tokens/_md-comp-fab-secondary-small.scss +23 -0
  229. package/tokens/_md-comp-fab-secondary.scss +23 -0
  230. package/tokens/_md-comp-fab-surface-large.scss +23 -0
  231. package/tokens/_md-comp-fab-surface-small.scss +23 -0
  232. package/tokens/_md-comp-fab-surface.scss +23 -0
  233. package/tokens/_md-comp-fab-tertiary-large.scss +23 -0
  234. package/tokens/_md-comp-fab-tertiary-small.scss +23 -0
  235. package/tokens/_md-comp-fab-tertiary.scss +23 -0
  236. package/tokens/_md-comp-filled-autocomplete.scss +25 -0
  237. package/tokens/_md-comp-filled-button.scss +58 -0
  238. package/tokens/_md-comp-filled-card.scss +23 -0
  239. package/tokens/_md-comp-filled-icon-button.scss +21 -0
  240. package/tokens/_md-comp-filled-menu-button.scss +25 -0
  241. package/tokens/_md-comp-filled-select.scss +25 -0
  242. package/tokens/_md-comp-filled-text-field.scss +46 -0
  243. package/tokens/_md-comp-filled-tonal-button.scss +59 -0
  244. package/tokens/_md-comp-filled-tonal-icon-button.scss +24 -0
  245. package/tokens/_md-comp-filter-chip.scss +38 -0
  246. package/tokens/_md-comp-full-screen-dialog.scss +25 -0
  247. package/tokens/_md-comp-icon-button.scss +21 -0
  248. package/tokens/_md-comp-input-chip.scss +38 -0
  249. package/tokens/_md-comp-linear-progress-indicator.scss +22 -0
  250. package/tokens/_md-comp-list.scss +58 -0
  251. package/tokens/_md-comp-menu.scss +21 -0
  252. package/tokens/_md-comp-navigation-bar.scss +25 -0
  253. package/tokens/_md-comp-navigation-drawer.scss +25 -0
  254. package/tokens/_md-comp-navigation-rail.scss +25 -0
  255. package/tokens/_md-comp-outlined-autocomplete.scss +28 -0
  256. package/tokens/_md-comp-outlined-button.scss +56 -0
  257. package/tokens/_md-comp-outlined-card.scss +23 -0
  258. package/tokens/_md-comp-outlined-icon-button.scss +21 -0
  259. package/tokens/_md-comp-outlined-menu-button.scss +23 -0
  260. package/tokens/_md-comp-outlined-segmented-button.scss +38 -0
  261. package/tokens/_md-comp-outlined-select.scss +25 -0
  262. package/tokens/_md-comp-outlined-text-field.scss +44 -0
  263. package/tokens/_md-comp-plain-tooltip.scss +21 -0
  264. package/tokens/_md-comp-primary-navigation-tab.scss +41 -0
  265. package/tokens/_md-comp-radio-button.scss +19 -0
  266. package/tokens/_md-comp-rich-tooltip.scss +25 -0
  267. package/tokens/_md-comp-scrim.scss +17 -0
  268. package/tokens/_md-comp-search-bar.scss +25 -0
  269. package/tokens/_md-comp-search-view.scss +23 -0
  270. package/tokens/_md-comp-secondary-navigation-tab.scss +41 -0
  271. package/tokens/_md-comp-sheet-bottom.scss +21 -0
  272. package/tokens/_md-comp-sheet-floating.scss +21 -0
  273. package/tokens/_md-comp-sheet-side.scss +25 -0
  274. package/tokens/_md-comp-slider.scss +38 -0
  275. package/tokens/_md-comp-snackbar.scss +25 -0
  276. package/tokens/_md-comp-standard-menu-button.scss +23 -0
  277. package/tokens/_md-comp-suggestion-chip.scss +72 -0
  278. package/tokens/_md-comp-switch.scss +21 -0
  279. package/tokens/_md-comp-text-button.scss +56 -0
  280. package/tokens/_md-comp-time-input.scss +25 -0
  281. package/tokens/_md-comp-time-picker.scss +25 -0
  282. package/tokens/_md-comp-top-app-bar-large.scss +23 -0
  283. package/tokens/_md-comp-top-app-bar-medium.scss +23 -0
  284. package/tokens/_md-comp-top-app-bar-small-centered.scss +26 -0
  285. package/tokens/_md-comp-top-app-bar-small.scss +23 -0
  286. package/tokens/_md-ref-palette.scss +12 -0
  287. package/tokens/_md-ref-typeface.scss +12 -0
  288. package/tokens/_md-sys-color.scss +25 -0
  289. package/tokens/_md-sys-elevation.scss +30 -0
  290. package/tokens/_md-sys-motion.scss +12 -0
  291. package/tokens/_md-sys-shape.scss +12 -0
  292. package/tokens/_md-sys-state.scss +12 -0
  293. package/tokens/_md-sys-typescale.scss +17 -0
  294. package/tokens/{v0_160 → v0_161}/_md-comp-assist-chip.scss +1 -1
  295. package/tokens/{v0_160 → v0_161}/_md-comp-badge.scss +1 -1
  296. package/tokens/{v0_160 → v0_161}/_md-comp-banner.scss +1 -1
  297. package/tokens/{v0_160 → v0_161}/_md-comp-bottom-app-bar.scss +1 -1
  298. package/tokens/{v0_160 → v0_161}/_md-comp-carousel-item.scss +1 -1
  299. package/tokens/{v0_160 → v0_161}/_md-comp-checkbox.scss +1 -1
  300. package/tokens/{v0_160 → v0_161}/_md-comp-circular-progress-indicator.scss +1 -1
  301. package/tokens/{v0_160 → v0_161}/_md-comp-data-table.scss +1 -1
  302. package/tokens/{v0_160 → v0_161}/_md-comp-date-input-modal.scss +1 -1
  303. package/tokens/{v0_160 → v0_161}/_md-comp-date-picker-docked.scss +1 -1
  304. package/tokens/{v0_160 → v0_161}/_md-comp-date-picker-modal.scss +3 -3
  305. package/tokens/{v0_160 → v0_161}/_md-comp-dialog.scss +1 -1
  306. package/tokens/{v0_160 → v0_161}/_md-comp-divider.scss +1 -1
  307. package/tokens/{v0_160 → v0_161}/_md-comp-elevated-button.scss +1 -1
  308. package/tokens/{v0_160 → v0_161}/_md-comp-elevated-card.scss +1 -1
  309. package/tokens/{v0_160 → v0_161}/_md-comp-extended-fab-branded.scss +1 -1
  310. package/tokens/{v0_160 → v0_161}/_md-comp-extended-fab-primary.scss +1 -1
  311. package/tokens/{v0_160 → v0_161}/_md-comp-extended-fab-secondary.scss +1 -1
  312. package/tokens/{v0_160 → v0_161}/_md-comp-extended-fab-surface.scss +1 -1
  313. package/tokens/{v0_160 → v0_161}/_md-comp-extended-fab-tertiary.scss +1 -1
  314. package/tokens/{v0_160 → v0_161}/_md-comp-fab-branded-large.scss +1 -1
  315. package/tokens/{v0_160 → v0_161}/_md-comp-fab-branded.scss +1 -1
  316. package/tokens/{v0_160 → v0_161}/_md-comp-fab-primary-large.scss +1 -1
  317. package/tokens/{v0_160 → v0_161}/_md-comp-fab-primary-small.scss +1 -1
  318. package/tokens/{v0_160 → v0_161}/_md-comp-fab-primary.scss +1 -1
  319. package/tokens/{v0_160 → v0_161}/_md-comp-fab-secondary-large.scss +1 -1
  320. package/tokens/{v0_160 → v0_161}/_md-comp-fab-secondary-small.scss +1 -1
  321. package/tokens/{v0_160 → v0_161}/_md-comp-fab-secondary.scss +1 -1
  322. package/tokens/{v0_160 → v0_161}/_md-comp-fab-surface-large.scss +1 -1
  323. package/tokens/{v0_160 → v0_161}/_md-comp-fab-surface-small.scss +1 -1
  324. package/tokens/{v0_160 → v0_161}/_md-comp-fab-surface.scss +1 -1
  325. package/tokens/{v0_160 → v0_161}/_md-comp-fab-tertiary-large.scss +1 -1
  326. package/tokens/{v0_160 → v0_161}/_md-comp-fab-tertiary-small.scss +1 -1
  327. package/tokens/{v0_160 → v0_161}/_md-comp-fab-tertiary.scss +1 -1
  328. package/tokens/{v0_160 → v0_161}/_md-comp-filled-autocomplete.scss +1 -1
  329. package/tokens/{v0_160 → v0_161}/_md-comp-filled-button.scss +1 -1
  330. package/tokens/{v0_160 → v0_161}/_md-comp-filled-card.scss +1 -1
  331. package/tokens/{v0_160 → v0_161}/_md-comp-filled-icon-button.scss +1 -1
  332. package/tokens/{v0_160 → v0_161}/_md-comp-filled-menu-button.scss +1 -1
  333. package/tokens/{v0_160 → v0_161}/_md-comp-filled-select.scss +1 -1
  334. package/tokens/{v0_160 → v0_161}/_md-comp-filled-text-field.scss +1 -1
  335. package/tokens/{v0_160 → v0_161}/_md-comp-filled-tonal-button.scss +1 -1
  336. package/tokens/{v0_160 → v0_161}/_md-comp-filled-tonal-icon-button.scss +1 -1
  337. package/tokens/{v0_160 → v0_161}/_md-comp-filter-chip.scss +1 -1
  338. package/tokens/{v0_160 → v0_161}/_md-comp-full-screen-dialog.scss +1 -1
  339. package/tokens/{v0_160 → v0_161}/_md-comp-icon-button.scss +1 -1
  340. package/tokens/{v0_160 → v0_161}/_md-comp-input-chip.scss +1 -1
  341. package/tokens/{v0_160 → v0_161}/_md-comp-linear-progress-indicator.scss +1 -1
  342. package/tokens/{v0_160 → v0_161}/_md-comp-list.scss +1 -1
  343. package/tokens/v0_161/_md-comp-menu.scss +37 -0
  344. package/tokens/{v0_160 → v0_161}/_md-comp-navigation-bar.scss +1 -1
  345. package/tokens/{v0_160 → v0_161}/_md-comp-navigation-drawer.scss +1 -1
  346. package/tokens/{v0_160 → v0_161}/_md-comp-navigation-rail.scss +1 -1
  347. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-autocomplete.scss +1 -1
  348. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-button.scss +1 -1
  349. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-card.scss +1 -1
  350. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-icon-button.scss +1 -1
  351. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-menu-button.scss +1 -1
  352. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-segmented-button.scss +1 -1
  353. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-select.scss +1 -1
  354. package/tokens/{v0_160 → v0_161}/_md-comp-outlined-text-field.scss +1 -1
  355. package/tokens/{v0_160 → v0_161}/_md-comp-plain-tooltip.scss +1 -1
  356. package/tokens/{v0_160 → v0_161}/_md-comp-primary-navigation-tab.scss +1 -1
  357. package/tokens/{v0_160 → v0_161}/_md-comp-radio-button.scss +1 -1
  358. package/tokens/{v0_160 → v0_161}/_md-comp-rich-tooltip.scss +1 -1
  359. package/tokens/{v0_160 → v0_161}/_md-comp-scrim.scss +1 -1
  360. package/tokens/{v0_160 → v0_161}/_md-comp-search-bar.scss +1 -1
  361. package/tokens/{v0_160 → v0_161}/_md-comp-search-view.scss +1 -1
  362. package/tokens/{v0_160 → v0_161}/_md-comp-secondary-navigation-tab.scss +1 -1
  363. package/tokens/{v0_160 → v0_161}/_md-comp-sheet-bottom.scss +1 -1
  364. package/tokens/{v0_160 → v0_161}/_md-comp-sheet-floating.scss +1 -1
  365. package/tokens/{v0_160 → v0_161}/_md-comp-sheet-side.scss +1 -1
  366. package/tokens/{v0_160 → v0_161}/_md-comp-slider.scss +1 -1
  367. package/tokens/{v0_160 → v0_161}/_md-comp-snackbar.scss +1 -1
  368. package/tokens/{v0_160 → v0_161}/_md-comp-standard-menu-button.scss +1 -1
  369. package/tokens/{v0_160 → v0_161}/_md-comp-suggestion-chip.scss +1 -1
  370. package/tokens/{v0_160 → v0_161}/_md-comp-switch.scss +1 -1
  371. package/tokens/{v0_160 → v0_161}/_md-comp-text-button.scss +1 -1
  372. package/tokens/{v0_160 → v0_161}/_md-comp-time-input.scss +1 -1
  373. package/tokens/{v0_160 → v0_161}/_md-comp-time-picker.scss +1 -1
  374. package/tokens/{v0_160 → v0_161}/_md-comp-top-app-bar-large.scss +1 -1
  375. package/tokens/{v0_160 → v0_161}/_md-comp-top-app-bar-medium.scss +1 -1
  376. package/tokens/{v0_160 → v0_161}/_md-comp-top-app-bar-small-centered.scss +1 -1
  377. package/tokens/{v0_160 → v0_161}/_md-comp-top-app-bar-small.scss +1 -1
  378. package/tokens/{v0_160 → v0_161}/_md-ref-palette.scss +1 -1
  379. package/tokens/{v0_160 → v0_161}/_md-ref-typeface.scss +1 -1
  380. package/tokens/{v0_160 → v0_161}/_md-sys-color.scss +1 -1
  381. package/tokens/{v0_160 → v0_161}/_md-sys-elevation.scss +1 -1
  382. package/tokens/{v0_160 → v0_161}/_md-sys-motion.scss +1 -1
  383. package/tokens/{v0_160 → v0_161}/_md-sys-shape.scss +1 -1
  384. package/tokens/{v0_160 → v0_161}/_md-sys-state.scss +1 -1
  385. package/tokens/{v0_160 → v0_161}/_md-sys-typescale.scss +1 -1
  386. package/autocomplete/_filled-autocomplete.scss +0 -6
  387. package/autocomplete/_outlined-autocomplete.scss +0 -6
  388. package/autocomplete/autocomplete-item.d.ts +0 -19
  389. package/autocomplete/autocomplete-item.js +0 -22
  390. package/autocomplete/autocomplete-item.js.map +0 -1
  391. package/autocomplete/autocomplete-list.d.ts +0 -19
  392. package/autocomplete/autocomplete-list.js +0 -23
  393. package/autocomplete/autocomplete-list.js.map +0 -1
  394. package/autocomplete/autocomplete-surface.d.ts +0 -19
  395. package/autocomplete/autocomplete-surface.js +0 -23
  396. package/autocomplete/autocomplete-surface.js.map +0 -1
  397. package/autocomplete/filled-autocomplete.d.ts +0 -28
  398. package/autocomplete/filled-autocomplete.js +0 -46
  399. package/autocomplete/filled-autocomplete.js.map +0 -1
  400. package/autocomplete/lib/_filled-autocomplete.scss +0 -189
  401. package/autocomplete/lib/_outlined-autocomplete.scss +0 -178
  402. package/autocomplete/lib/_shared.scss +0 -25
  403. package/autocomplete/lib/autocomplete.d.ts +0 -54
  404. package/autocomplete/lib/autocomplete.js +0 -265
  405. package/autocomplete/lib/autocomplete.js.map +0 -1
  406. package/autocomplete/lib/autocompleteitem/autocomplete-item.d.ts +0 -11
  407. package/autocomplete/lib/autocompleteitem/autocomplete-item.js +0 -14
  408. package/autocomplete/lib/autocompleteitem/autocomplete-item.js.map +0 -1
  409. package/autocomplete/lib/autocompleteitem/harness.d.ts +0 -11
  410. package/autocomplete/lib/autocompleteitem/harness.js +0 -12
  411. package/autocomplete/lib/autocompleteitem/harness.js.map +0 -1
  412. package/autocomplete/lib/autocompletelist/_autocomplete-list.scss +0 -13
  413. package/autocomplete/lib/autocompletelist/autocomplete-list-styles.css.js +0 -9
  414. package/autocomplete/lib/autocompletelist/autocomplete-list-styles.css.js.map +0 -1
  415. package/autocomplete/lib/autocompletelist/autocomplete-list-styles.scss +0 -10
  416. package/autocomplete/lib/autocompletelist/autocomplete-list.d.ts +0 -14
  417. package/autocomplete/lib/autocompletelist/autocomplete-list.js +0 -21
  418. package/autocomplete/lib/autocompletelist/autocomplete-list.js.map +0 -1
  419. package/autocomplete/lib/autocompletelist/harness.d.ts +0 -11
  420. package/autocomplete/lib/autocompletelist/harness.js +0 -12
  421. package/autocomplete/lib/autocompletelist/harness.js.map +0 -1
  422. package/autocomplete/lib/autocompletesurface/_autocomplete-surface.scss +0 -13
  423. package/autocomplete/lib/autocompletesurface/autocomplete-surface-styles.css.js +0 -9
  424. package/autocomplete/lib/autocompletesurface/autocomplete-surface-styles.css.js.map +0 -1
  425. package/autocomplete/lib/autocompletesurface/autocomplete-surface-styles.scss +0 -10
  426. package/autocomplete/lib/autocompletesurface/autocomplete-surface.d.ts +0 -13
  427. package/autocomplete/lib/autocompletesurface/autocomplete-surface.js +0 -21
  428. package/autocomplete/lib/autocompletesurface/autocomplete-surface.js.map +0 -1
  429. package/autocomplete/lib/filled-styles.css.d.ts +0 -1
  430. package/autocomplete/lib/filled-styles.css.js +0 -9
  431. package/autocomplete/lib/filled-styles.css.js.map +0 -1
  432. package/autocomplete/lib/filled-styles.scss +0 -10
  433. package/autocomplete/lib/outlined-styles.css.d.ts +0 -1
  434. package/autocomplete/lib/outlined-styles.css.js +0 -9
  435. package/autocomplete/lib/outlined-styles.css.js.map +0 -1
  436. package/autocomplete/lib/outlined-styles.scss +0 -10
  437. package/autocomplete/lib/shared-styles.css.js +0 -9
  438. package/autocomplete/lib/shared-styles.css.js.map +0 -1
  439. package/autocomplete/outlined-autocomplete.d.ts +0 -28
  440. package/autocomplete/outlined-autocomplete.js +0 -46
  441. package/autocomplete/outlined-autocomplete.js.map +0 -1
  442. package/chips/action/delete-action.d.ts +0 -18
  443. package/chips/action/delete-action.js +0 -20
  444. package/chips/action/delete-action.js.map +0 -1
  445. package/chips/action/lib/action.d.ts +0 -47
  446. package/chips/action/lib/action.js +0 -162
  447. package/chips/action/lib/action.js.map +0 -1
  448. package/chips/action/lib/constants.d.ts +0 -62
  449. package/chips/action/lib/constants.js +0 -69
  450. package/chips/action/lib/constants.js.map +0 -1
  451. package/chips/action/lib/delete-action.d.ts +0 -20
  452. package/chips/action/lib/delete-action.js +0 -65
  453. package/chips/action/lib/delete-action.js.map +0 -1
  454. package/chips/action/lib/events.d.ts +0 -14
  455. package/chips/action/lib/events.js +0 -16
  456. package/chips/action/lib/events.js.map +0 -1
  457. package/chips/action/lib/link-action.d.ts +0 -19
  458. package/chips/action/lib/link-action.js +0 -55
  459. package/chips/action/lib/link-action.js.map +0 -1
  460. package/chips/action/lib/presentational-action.d.ts +0 -15
  461. package/chips/action/lib/presentational-action.js +0 -30
  462. package/chips/action/lib/presentational-action.js.map +0 -1
  463. package/chips/action/lib/primary-action.d.ts +0 -28
  464. package/chips/action/lib/primary-action.js +0 -88
  465. package/chips/action/lib/primary-action.js.map +0 -1
  466. package/chips/action/lib/selectable-action.d.ts +0 -17
  467. package/chips/action/lib/selectable-action.js +0 -67
  468. package/chips/action/lib/selectable-action.js.map +0 -1
  469. package/chips/action/lib/types.d.ts +0 -23
  470. package/chips/action/lib/types.js +0 -7
  471. package/chips/action/lib/types.js.map +0 -1
  472. package/chips/action/link-action.d.ts +0 -18
  473. package/chips/action/link-action.js +0 -20
  474. package/chips/action/link-action.js.map +0 -1
  475. package/chips/action/presentational-action.d.ts +0 -18
  476. package/chips/action/presentational-action.js +0 -20
  477. package/chips/action/presentational-action.js.map +0 -1
  478. package/chips/action/primary-action.d.ts +0 -18
  479. package/chips/action/primary-action.js +0 -20
  480. package/chips/action/primary-action.js.map +0 -1
  481. package/chips/action/selectable-action.d.ts +0 -18
  482. package/chips/action/selectable-action.js +0 -20
  483. package/chips/action/selectable-action.js.map +0 -1
  484. package/chips/chip/lib/_assist-chip-theme.scss +0 -99
  485. package/chips/chip/lib/_chip-theme.scss +0 -1285
  486. package/chips/chip/lib/_chip.scss +0 -444
  487. package/chips/chip/lib/_filter-chip-theme.scss +0 -130
  488. package/chips/chip/lib/_input-chip-theme.scss +0 -91
  489. package/chips/chip/lib/_suggestion-chip-theme.scss +0 -92
  490. package/chips/chip/lib/action-chip.d.ts +0 -18
  491. package/chips/chip/lib/action-chip.js +0 -39
  492. package/chips/chip/lib/action-chip.js.map +0 -1
  493. package/chips/chip/lib/adapter.d.ts +0 -50
  494. package/chips/chip/lib/adapter.js +0 -7
  495. package/chips/chip/lib/adapter.js.map +0 -1
  496. package/chips/chip/lib/animationframe.d.ts +0 -31
  497. package/chips/chip/lib/animationframe.js +0 -66
  498. package/chips/chip/lib/animationframe.js.map +0 -1
  499. package/chips/chip/lib/chip.d.ts +0 -43
  500. package/chips/chip/lib/chip.js +0 -134
  501. package/chips/chip/lib/chip.js.map +0 -1
  502. package/chips/chip/lib/constants.d.ts +0 -43
  503. package/chips/chip/lib/constants.js +0 -48
  504. package/chips/chip/lib/constants.js.map +0 -1
  505. package/chips/chip/lib/foundation.d.ts +0 -41
  506. package/chips/chip/lib/foundation.js +0 -255
  507. package/chips/chip/lib/foundation.js.map +0 -1
  508. package/chips/chip/lib/link-chip.d.ts +0 -21
  509. package/chips/chip/lib/link-chip.js +0 -53
  510. package/chips/chip/lib/link-chip.js.map +0 -1
  511. package/chips/chip/lib/presentational-chip.d.ts +0 -18
  512. package/chips/chip/lib/presentational-chip.js +0 -39
  513. package/chips/chip/lib/presentational-chip.js.map +0 -1
  514. package/chips/chip/lib/selectable-chip.d.ts +0 -22
  515. package/chips/chip/lib/selectable-chip.js +0 -57
  516. package/chips/chip/lib/selectable-chip.js.map +0 -1
  517. package/chips/chip/lib/types.d.ts +0 -42
  518. package/chips/chip/lib/types.js +0 -7
  519. package/chips/chip/lib/types.js.map +0 -1
  520. package/chips/chipset/lib/_chip-set-theme.scss +0 -50
  521. package/chips/chipset/lib/_chip-set.scss +0 -48
  522. package/chips/chipset/lib/adapter.d.ts +0 -45
  523. package/chips/chipset/lib/adapter.js +0 -7
  524. package/chips/chipset/lib/adapter.js.map +0 -1
  525. package/chips/chipset/lib/constants.d.ts +0 -26
  526. package/chips/chipset/lib/constants.js +0 -30
  527. package/chips/chipset/lib/constants.js.map +0 -1
  528. package/chips/chipset/lib/foundation.d.ts +0 -68
  529. package/chips/chipset/lib/foundation.js +0 -314
  530. package/chips/chipset/lib/foundation.js.map +0 -1
  531. package/chips/chipset/lib/types.d.ts +0 -41
  532. package/chips/chipset/lib/types.js +0 -7
  533. package/chips/chipset/lib/types.js.map +0 -1
  534. package/controller/foundation.d.ts +0 -24
  535. package/controller/foundation.js +0 -18
  536. package/controller/foundation.js.map +0 -1
  537. package/controller/observer-foundation.d.ts +0 -25
  538. package/controller/observer-foundation.js +0 -37
  539. package/controller/observer-foundation.js.map +0 -1
  540. package/controller/observer.d.ts +0 -52
  541. package/controller/observer.js +0 -149
  542. package/controller/observer.js.map +0 -1
  543. package/decorators/bound.d.ts +0 -40
  544. package/decorators/bound.js +0 -49
  545. package/decorators/bound.js.map +0 -1
  546. package/list/lib/avatar/_list-item-avatar.scss +0 -40
  547. package/list/lib/avatar/list-item-avatar-styles.css.d.ts +0 -1
  548. package/list/lib/avatar/list-item-avatar-styles.css.js +0 -9
  549. package/list/lib/avatar/list-item-avatar-styles.css.js.map +0 -1
  550. package/list/lib/avatar/list-item-avatar-styles.scss +0 -10
  551. package/list/lib/avatar/list-item-avatar.d.ts +0 -21
  552. package/list/lib/avatar/list-item-avatar.js +0 -48
  553. package/list/lib/avatar/list-item-avatar.js.map +0 -1
  554. package/list/lib/icon/_list-item-icon.scss +0 -71
  555. package/list/lib/icon/list-item-icon-styles.css.d.ts +0 -1
  556. package/list/lib/icon/list-item-icon-styles.css.js +0 -9
  557. package/list/lib/icon/list-item-icon-styles.css.js.map +0 -1
  558. package/list/lib/icon/list-item-icon-styles.scss +0 -10
  559. package/list/lib/icon/list-item-icon.d.ts +0 -9
  560. package/list/lib/icon/list-item-icon.js +0 -15
  561. package/list/lib/icon/list-item-icon.js.map +0 -1
  562. package/list/lib/image/_list-item-image.scss +0 -63
  563. package/list/lib/image/list-item-image-styles.css.d.ts +0 -1
  564. package/list/lib/image/list-item-image-styles.css.js +0 -9
  565. package/list/lib/image/list-item-image-styles.css.js.map +0 -1
  566. package/list/lib/image/list-item-image-styles.scss +0 -10
  567. package/list/lib/image/list-item-image.d.ts +0 -21
  568. package/list/lib/image/list-item-image.js +0 -48
  569. package/list/lib/image/list-item-image.js.map +0 -1
  570. package/list/lib/listitem/list-item-private-styles.css.d.ts +0 -1
  571. package/list/lib/listitem/list-item-private-styles.css.js +0 -9
  572. package/list/lib/listitem/list-item-private-styles.css.js.map +0 -1
  573. package/list/lib/video/_list-item-video.scss +0 -71
  574. package/list/lib/video/list-item-video-styles.css.d.ts +0 -1
  575. package/list/lib/video/list-item-video-styles.css.js +0 -9
  576. package/list/lib/video/list-item-video-styles.css.js.map +0 -1
  577. package/list/lib/video/list-item-video-styles.scss +0 -10
  578. package/list/lib/video/list-item-video.d.ts +0 -53
  579. package/list/lib/video/list-item-video.js +0 -115
  580. package/list/lib/video/list-item-video.js.map +0 -1
  581. package/list/list-item-avatar.d.ts +0 -20
  582. package/list/list-item-avatar.js +0 -23
  583. package/list/list-item-avatar.js.map +0 -1
  584. package/list/list-item-icon.d.ts +0 -20
  585. package/list/list-item-icon.js +0 -23
  586. package/list/list-item-icon.js.map +0 -1
  587. package/list/list-item-image.d.ts +0 -20
  588. package/list/list-item-image.js +0 -23
  589. package/list/list-item-image.js.map +0 -1
  590. package/list/list-item-video.d.ts +0 -20
  591. package/list/list-item-video.js +0 -23
  592. package/list/list-item-video.js.map +0 -1
  593. package/menu/lib/menuitem/menu-item-private-styles.css.d.ts +0 -1
  594. package/menu/lib/menuitem/menu-item-private-styles.css.js +0 -9
  595. package/menu/lib/menuitem/menu-item-private-styles.css.js.map +0 -1
  596. package/menusurface/_menu-surface.scss +0 -6
  597. package/menusurface/lib/_md-comp-menu-surface.scss +0 -31
  598. package/menusurface/lib/_menu-surface.scss +0 -122
  599. package/menusurface/lib/adapter.d.ts +0 -46
  600. package/menusurface/lib/adapter.js +0 -7
  601. package/menusurface/lib/adapter.js.map +0 -1
  602. package/menusurface/lib/constants.d.ts +0 -71
  603. package/menusurface/lib/constants.js +0 -83
  604. package/menusurface/lib/constants.js.map +0 -1
  605. package/menusurface/lib/foundation.d.ts +0 -176
  606. package/menusurface/lib/foundation.js +0 -544
  607. package/menusurface/lib/foundation.js.map +0 -1
  608. package/menusurface/lib/menu-surface-styles.css.d.ts +0 -1
  609. package/menusurface/lib/menu-surface-styles.css.js +0 -9
  610. package/menusurface/lib/menu-surface-styles.css.js.map +0 -1
  611. package/menusurface/lib/menu-surface-styles.scss +0 -10
  612. package/menusurface/lib/menu-surface.d.ts +0 -62
  613. package/menusurface/lib/menu-surface.js +0 -347
  614. package/menusurface/lib/menu-surface.js.map +0 -1
  615. package/menusurface/lib/types.d.ts +0 -19
  616. package/menusurface/lib/types.js +0 -7
  617. package/menusurface/lib/types.js.map +0 -1
  618. package/menusurface/menu-surface.d.ts +0 -14
  619. package/menusurface/menu-surface.js +0 -17
  620. package/menusurface/menu-surface.js.map +0 -1
  621. package/sass/_elevation.scss +0 -159
  622. package/sass/_resolvers.scss +0 -16
  623. package/sass/_typography.scss +0 -39
  624. package/tokens/v0_160/_md-comp-menu.scss +0 -121
  625. /package/{autocomplete/lib/autocompletelist/autocomplete-list-styles.css.d.ts → chips/lib/assist-styles.css.d.ts} +0 -0
  626. /package/{autocomplete → chips}/lib/shared-styles.css.d.ts +0 -0
  627. /package/{autocomplete/lib/autocompletesurface/autocomplete-surface-styles.css.d.ts → chips/lib/suggestion-styles.css.d.ts} +0 -0
  628. /package/tokens/{v0_160 → v0_161}/_index.scss +0 -0
  629. /package/tokens/{v0_160 → v0_161}/index.test.css.d.ts +0 -0
  630. /package/tokens/{v0_160 → v0_161}/index.test.css.js +0 -0
  631. /package/tokens/{v0_160 → v0_161}/index.test.css.js.map +0 -0
  632. /package/tokens/{v0_160 → v0_161}/index.test.scss +0 -0
  633. /package/tokens/{v0_160 → v0_161}/lib.test.css.d.ts +0 -0
  634. /package/tokens/{v0_160 → v0_161}/lib.test.css.js +0 -0
  635. /package/tokens/{v0_160 → v0_161}/lib.test.css.js.map +0 -0
  636. /package/tokens/{v0_160 → v0_161}/lib.test.scss +0 -0
package/menu/lib/menu.js CHANGED
@@ -9,8 +9,8 @@ import { __decorate, __metadata } from "tslib";
9
9
  import '../../list/list.js';
10
10
  import '../../focus/focus-ring.js';
11
11
  import '../../elevation/elevation.js';
12
- import { html, LitElement } from 'lit';
13
- import { property, query } from 'lit/decorators.js';
12
+ import { html, isServer, LitElement } from 'lit';
13
+ import { eventOptions, property, query, state } from 'lit/decorators.js';
14
14
  import { classMap } from 'lit/directives/class-map.js';
15
15
  import { styleMap } from 'lit/directives/style-map.js';
16
16
  import { ariaProperty } from '../../decorators/aria-property.js';
@@ -20,6 +20,10 @@ import { List } from '../../list/lib/list.js';
20
20
  import { createAnimationSignal, EASING } from '../../motion/animation.js';
21
21
  import { SurfacePositionController } from './surfacePositionController.js';
22
22
  import { TypeaheadController } from './typeaheadController.js';
23
+ /**
24
+ * The default value for the typeahead buffer time in Milliseconds.
25
+ */
26
+ export const DEFAULT_TYPEAHEAD_BUFFER_TIME = 200;
23
27
  /**
24
28
  * Gets the currently focused element on the page.
25
29
  *
@@ -38,9 +42,9 @@ function getFocusedElement(activeDoc = document) {
38
42
  return activeEl;
39
43
  }
40
44
  /**
41
- * @fires opening Fired before the opening animation begins (not fired on quick)
45
+ * @fires opening Fired before the opening animation begins
42
46
  * @fires opened Fired once the menu is open, after any animations
43
- * @fires closing Fired before the closing animation begins (not fired on quick)
47
+ * @fires closing Fired before the closing animation begins
44
48
  * @fires closed Fired once the menu is closed, after any animations
45
49
  */
46
50
  export class Menu extends LitElement {
@@ -97,11 +101,15 @@ export class Menu extends LitElement {
97
101
  * The tabindex of the underlying list element.
98
102
  */
99
103
  this.listTabIndex = 0;
104
+ /**
105
+ * The role of the underlying list element.
106
+ */
107
+ this.role = 'list';
100
108
  /**
101
109
  * The max time between the keystrokes of the typeahead menu behavior before
102
110
  * it clears the typeahead buffer.
103
111
  */
104
- this.typeaheadBufferTime = 200;
112
+ this.typeaheadBufferTime = DEFAULT_TYPEAHEAD_BUFFER_TIME;
105
113
  /**
106
114
  * The corner of the anchor which to align the menu in the standard logical
107
115
  * property style of <block>_<inline>.
@@ -125,6 +133,7 @@ export class Menu extends LitElement {
125
133
  * The element that should be focused by default once opened.
126
134
  */
127
135
  this.defaultFocus = 'LIST_ROOT';
136
+ this.typeaheadActive = true;
128
137
  this.openCloseAnimationSignal = createAnimationSignal();
129
138
  /**
130
139
  * The element that was focused before the menu opened.
@@ -137,6 +146,7 @@ export class Menu extends LitElement {
137
146
  return {
138
147
  getItems: () => this.items,
139
148
  typeaheadBufferTime: this.typeaheadBufferTime,
149
+ active: this.typeaheadActive
140
150
  };
141
151
  });
142
152
  /**
@@ -192,6 +202,7 @@ export class Menu extends LitElement {
192
202
  break;
193
203
  }
194
204
  if (this.quick) {
205
+ this.dispatchEvent(new Event('opening'));
195
206
  this.dispatchEvent(new Event('opened'));
196
207
  }
197
208
  else {
@@ -203,6 +214,9 @@ export class Menu extends LitElement {
203
214
  */
204
215
  this.beforeClose = async () => {
205
216
  this.open = false;
217
+ if (!this.skipRestoreFocus) {
218
+ this.lastFocusedElement?.focus?.();
219
+ }
206
220
  if (!this.quick) {
207
221
  await this.animateClose();
208
222
  }
@@ -212,11 +226,9 @@ export class Menu extends LitElement {
212
226
  */
213
227
  this.onClosed = () => {
214
228
  if (this.quick) {
229
+ this.dispatchEvent(new Event('closing'));
215
230
  this.dispatchEvent(new Event('closed'));
216
231
  }
217
- if (!this.skipRestoreFocus) {
218
- this.lastFocusedElement?.focus?.();
219
- }
220
232
  };
221
233
  this.onWindowClick = (e) => {
222
234
  if (!this.stayOpenOnOutsideClick && !e.composedPath().includes(this)) {
@@ -250,11 +262,13 @@ export class Menu extends LitElement {
250
262
  * Renders the positionable surface element and its contents.
251
263
  */
252
264
  renderSurface() {
265
+ // TODO(b/274140618): elevation should be an underlay, not an overlay that
266
+ // tints content
253
267
  return html `
254
268
  <div
255
269
  class="menu ${classMap(this.getSurfaceClasses())}"
256
270
  style=${styleMap(this.menuPositionController.surfaceStyles)}>
257
- ${this.renderList()}
271
+ ${this.renderList()}
258
272
  ${this.renderElevation()}
259
273
  ${this.renderFocusRing()}
260
274
  </div>
@@ -265,16 +279,16 @@ export class Menu extends LitElement {
265
279
  */
266
280
  renderList() {
267
281
  return html `
268
- <md-list
269
- .ariaLabel=${this.ariaLabel}
270
- role="menu"
271
- listTabIndex=${this.listTabIndex}
272
- @focus=${this.onListFocus}
273
- @blur=${this.onListBlur}
274
- @click=${this.onListClick}
275
- @keydown=${this.typeaheadController.onKeydown}>
276
- ${this.renderMenuItems()}
277
- </md-list>`;
282
+ <md-list
283
+ .ariaLabel=${this.ariaLabel}
284
+ .role=${this.role}
285
+ listTabIndex=${this.listTabIndex}
286
+ @focus=${this.handleListFocus}
287
+ @blur=${this.handleListBlur}
288
+ @click=${this.handleListClick}
289
+ @keydown=${this.handleListKeydown}>
290
+ ${this.renderMenuItems()}
291
+ </md-list>`;
278
292
  }
279
293
  /**
280
294
  * Renders the menu items' slot
@@ -282,7 +296,9 @@ export class Menu extends LitElement {
282
296
  renderMenuItems() {
283
297
  return html `<slot
284
298
  @close-menu=${this.onCloseMenu}
285
- @deactivate-items=${this.onDeactivateItems}></slot>`;
299
+ @deactivate-items=${this.onDeactivateItems}
300
+ @deactivate-typeahead=${this.handleDeactivateTypeahead}
301
+ @activate-typeahead=${this.handleActivateTypeahead}></slot>`;
286
302
  }
287
303
  /**
288
304
  * Renders the elevation component.
@@ -303,14 +319,20 @@ export class Menu extends LitElement {
303
319
  'has-overflow': this.hasOverflow,
304
320
  };
305
321
  }
306
- onListFocus() {
322
+ handleListFocus() {
307
323
  this.focusRing.visible = shouldShowStrongFocus();
308
324
  }
309
- onListClick() {
325
+ handleListClick() {
310
326
  pointerPress();
311
327
  this.focusRing.visible = shouldShowStrongFocus();
312
328
  }
313
- onListBlur() {
329
+ // Capture so that we can grab the event before it reaches the list item
330
+ // istelf. Specifically useful for the case where typeahead encounters a space
331
+ // and we don't want the menu item to close the menu.
332
+ handleListKeydown(e) {
333
+ this.typeaheadController.onKeydown(e);
334
+ }
335
+ handleListBlur() {
314
336
  this.focusRing.visible = false;
315
337
  }
316
338
  /**
@@ -481,14 +503,14 @@ export class Menu extends LitElement {
481
503
  }
482
504
  connectedCallback() {
483
505
  super.connectedCallback();
484
- if (window && window.addEventListener) {
506
+ if (!isServer) {
485
507
  window.addEventListener('click', this.onWindowClick, { capture: true });
486
508
  }
487
509
  }
488
510
  disconnectedCallback() {
489
511
  super.disconnectedCallback();
490
- if (window && window.removeEventListener) {
491
- window.removeEventListener('click', this.onWindowClick);
512
+ if (!isServer) {
513
+ window.removeEventListener('click', this.onWindowClick, { capture: true });
492
514
  }
493
515
  }
494
516
  onCloseMenu(e) {
@@ -501,6 +523,18 @@ export class Menu extends LitElement {
501
523
  item.active = false;
502
524
  }
503
525
  }
526
+ handleDeactivateTypeahead(e) {
527
+ // stopPropagation so that this does not deactivate any typeaheads in menus
528
+ // nested above it e.g. md-sub-menu-item
529
+ e.stopPropagation();
530
+ this.typeaheadActive = false;
531
+ }
532
+ handleActivateTypeahead(e) {
533
+ // stopPropagation so that this does not activate any typeaheads in menus
534
+ // nested above it e.g. md-sub-menu-item
535
+ e.stopPropagation();
536
+ this.typeaheadActive = true;
537
+ }
504
538
  focus() {
505
539
  this.listElement?.focus();
506
540
  }
@@ -537,7 +571,7 @@ __decorate([
537
571
  ], Menu.prototype, "ariaLabel", void 0);
538
572
  __decorate([
539
573
  property({ attribute: false }),
540
- __metadata("design:type", HTMLElement)
574
+ __metadata("design:type", Object)
541
575
  ], Menu.prototype, "anchor", void 0);
542
576
  __decorate([
543
577
  property({ type: Boolean }),
@@ -567,6 +601,11 @@ __decorate([
567
601
  property({ type: Number, attribute: 'list-tab-index' }),
568
602
  __metadata("design:type", Object)
569
603
  ], Menu.prototype, "listTabIndex", void 0);
604
+ __decorate([
605
+ ariaProperty,
606
+ property({ type: String, attribute: 'data-role', noAccessor: true }),
607
+ __metadata("design:type", String)
608
+ ], Menu.prototype, "role", void 0);
570
609
  __decorate([
571
610
  property({ type: Number, attribute: 'typeahead-delay' }),
572
611
  __metadata("design:type", Object)
@@ -591,4 +630,14 @@ __decorate([
591
630
  property({ type: String, attribute: 'default-focus' }),
592
631
  __metadata("design:type", String)
593
632
  ], Menu.prototype, "defaultFocus", void 0);
633
+ __decorate([
634
+ state(),
635
+ __metadata("design:type", Object)
636
+ ], Menu.prototype, "typeaheadActive", void 0);
637
+ __decorate([
638
+ eventOptions({ capture: true }),
639
+ __metadata("design:type", Function),
640
+ __metadata("design:paramtypes", [KeyboardEvent]),
641
+ __metadata("design:returntype", void 0)
642
+ ], Menu.prototype, "handleListKeydown", null);
594
643
  //# sourceMappingURL=menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Required for @ariaProperty\n// tslint:disable:no-new-decorators\nimport '../../list/list.js';\nimport '../../focus/focus-ring.js';\nimport '../../elevation/elevation.js';\n\nimport {html, LitElement} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.js';\n\nimport {ariaProperty} from '../../decorators/aria-property.js';\nimport {MdFocusRing} from '../../focus/focus-ring.js';\nimport {pointerPress, shouldShowStrongFocus} from '../../focus/strong-focus.js';\nimport {List} from '../../list/lib/list.js';\nimport {createAnimationSignal, EASING} from '../../motion/animation.js';\n\nimport {MenuItem} from './shared.js';\nimport {Corner, SurfacePositionController} from './surfacePositionController.js';\nimport {TypeaheadController} from './typeaheadController.js';\n\nexport {Corner} from './surfacePositionController.js';\n\n/**\n * Element to focus on when menu is first opened.\n */\nexport type DefaultFocusState = 'NONE'|'LIST_ROOT'|'FIRST_ITEM'|'LAST_ITEM';\n\n/**\n * Gets the currently focused element on the page.\n *\n * @param activeDoc The document or shadowroot from which to start the search.\n * Defaults to `window.document`\n * @return Returns the currently deeply focused element or `null` if none.\n */\nfunction getFocusedElement(activeDoc: Document|ShadowRoot = document):\n HTMLElement|null {\n const activeEl = activeDoc.activeElement as HTMLElement | null;\n\n if (!activeEl) {\n return null;\n }\n\n if (activeEl.shadowRoot) {\n return getFocusedElement(activeEl.shadowRoot) ?? activeEl;\n }\n\n return activeEl;\n}\n\n/**\n * @fires opening Fired before the opening animation begins (not fired on quick)\n * @fires opened Fired once the menu is open, after any animations\n * @fires closing Fired before the closing animation begins (not fired on quick)\n * @fires closed Fired once the menu is closed, after any animations\n */\nexport abstract class Menu extends LitElement {\n @query('md-list') protected readonly listElement!: List|null;\n @query('.menu') protected readonly surfaceEl!: HTMLElement|null;\n @query('slot') protected readonly slotEl!: HTMLSlotElement|null;\n @query('md-focus-ring') protected readonly focusRing!: MdFocusRing;\n\n @ariaProperty\n @property({type: String, attribute: 'data-aria-label', noAccessor: true})\n override ariaLabel!: string;\n\n /**\n * The element in which the menu should align to.\n */\n @property({attribute: false}) anchor: HTMLElement|null = null;\n /**\n * Makes the element use `position:fixed` instead of `position:absolute`. In\n * most cases, the menu should position itself above most other\n * `position:absolute` or `position:fixed` elements when placed inside of\n * them. e.g. using a menu inside of an `md-dialog`.\n *\n * __NOTE__: Fixed menus will not scroll with the page and will be fixed to\n * the window instead.\n */\n @property({type: Boolean}) fixed = false;\n /**\n * Skips the opening and closing animations.\n */\n @property({type: Boolean}) quick = false;\n /**\n * Displays overflow content like a submenu.\n *\n * __NOTE__: This may cause adverse effects if you set\n * `md-menu {max-height:...}`\n * and have items overflowing items in the \"y\" direction.\n */\n @property({type: Boolean, attribute: 'has-overflow'}) hasOverflow = false;\n /**\n * Opens the menu and makes it visible. Alternative to the `.show()` and\n * `.close()` methods\n */\n @property({type: Boolean, reflect: true}) open = false;\n /**\n * Offsets the menu's inline alignment from the anchor by the given number in\n * pixels. This value is direction aware and will follow the LTR / RTL\n * direction.\n *\n * e.g. LTR: positive -> right, negative -> left\n * RTL: positive -> left, negative -> right\n */\n @property({type: Number, attribute: 'x-offset'}) xOffset = 0;\n /**\n * Offsets the menu's block alignment from the anchor by the given number in\n * pixels.\n *\n * e.g. positive -> down, negative -> up\n */\n @property({type: Number, attribute: 'y-offset'}) yOffset = 0;\n /**\n * The tabindex of the underlying list element.\n */\n @property({type: Number, attribute: 'list-tab-index'})\n listTabIndex = 0;\n /**\n * The max time between the keystrokes of the typeahead menu behavior before\n * it clears the typeahead buffer.\n */\n @property({type: Number, attribute: 'typeahead-delay'})\n typeaheadBufferTime = 200;\n /**\n * The corner of the anchor which to align the menu in the standard logical\n * property style of <block>_<inline>.\n */\n @property({type: String, attribute: 'anchor-corner'})\n anchorCorner: Corner = 'END_START';\n /**\n * The corner of the menu which to align the anchor in the standard logical\n * property style of <block>_<inline>.\n */\n @property({type: String, attribute: 'menu-corner'})\n menuCorner: Corner = 'START_START';\n /**\n * Keeps the user clicks outside the menu\n */\n @property({type: Boolean, attribute: 'stay-open-on-outside-click'})\n stayOpenOnOutsideClick = false;\n /**\n * After closing, does not restore focus to the last focused element before\n * the menu was opened.\n */\n @property({type: Boolean, attribute: 'skip-restore-focus'})\n skipRestoreFocus = false;\n /**\n * The element that should be focused by default once opened.\n */\n @property({type: String, attribute: 'default-focus'})\n defaultFocus: DefaultFocusState = 'LIST_ROOT';\n\n protected openCloseAnimationSignal = createAnimationSignal();\n\n /**\n * Whether the menu is animating upwards or downwards when opening. This is\n * helpful for calculating some animation calculations.\n */\n protected get openDirection(): 'UP'|'DOWN' {\n const menuCornerBlock = this.menuCorner.split('_')[0];\n return menuCornerBlock === 'START' ? 'DOWN' : 'UP';\n }\n\n /**\n * The element that was focused before the menu opened.\n */\n protected lastFocusedElement: HTMLElement|null = null;\n\n /**\n * Handles typeahead navigation through the menu.\n */\n protected typeaheadController = new TypeaheadController(() => {\n return {\n getItems: () => this.items,\n typeaheadBufferTime: this.typeaheadBufferTime,\n };\n });\n\n /**\n * Handles positioning the surface and aligning it to the anchor.\n */\n protected menuPositionController = new SurfacePositionController(this, () => {\n return {\n anchorCorner: this.anchorCorner,\n surfaceCorner: this.menuCorner,\n surfaceEl: this.surfaceEl,\n anchorEl: this.anchor,\n isTopLayer: this.fixed,\n isOpen: this.open,\n xOffset: this.xOffset,\n yOffset: this.yOffset,\n onOpen: this.onOpened,\n beforeClose: this.beforeClose,\n onClose: this.onClosed,\n };\n });\n\n /**\n * The menu items associated with this menu. The items must be `MenuItem`s and\n * have both the `md-menu-item` and `md-list-item` attributes.\n */\n get items(): MenuItem[] {\n const listElement = this.listElement;\n\n if (listElement) {\n return listElement.items.filter(el => el.hasAttribute('md-menu-item')) as\n MenuItem[];\n }\n\n return [];\n }\n\n override render() {\n return this.renderSurface();\n }\n\n /**\n * Renders the positionable surface element and its contents.\n */\n protected renderSurface() {\n return html`\n <div\n class=\"menu ${classMap(this.getSurfaceClasses())}\"\n style=${styleMap(this.menuPositionController.surfaceStyles)}>\n ${this.renderList()} \n ${this.renderElevation()}\n ${this.renderFocusRing()}\n </div>\n `;\n }\n\n /**\n * Renders the List element and its items\n */\n protected renderList() {\n return html`\n <md-list\n .ariaLabel=${this.ariaLabel}\n role=\"menu\"\n listTabIndex=${this.listTabIndex}\n @focus=${this.onListFocus}\n @blur=${this.onListBlur}\n @click=${this.onListClick}\n @keydown=${this.typeaheadController.onKeydown}>\n ${this.renderMenuItems()}\n </md-list>`;\n }\n\n /**\n * Renders the menu items' slot\n */\n protected renderMenuItems() {\n return html`<slot\n @close-menu=${this.onCloseMenu}\n @deactivate-items=${this.onDeactivateItems}></slot>`;\n }\n\n /**\n * Renders the elevation component.\n */\n protected renderElevation() {\n return html`<md-elevation shadow surface></md-elevation>`;\n }\n\n /**\n * Renders the focus ring component.\n */\n protected renderFocusRing() {\n return html`<md-focus-ring></md-focus-ring>`;\n }\n\n protected getSurfaceClasses() {\n return {\n open: this.open,\n fixed: this.fixed,\n 'has-overflow': this.hasOverflow,\n };\n }\n\n protected onListFocus() {\n this.focusRing.visible = shouldShowStrongFocus();\n }\n\n protected onListClick() {\n pointerPress();\n this.focusRing.visible = shouldShowStrongFocus();\n }\n\n protected onListBlur() {\n this.focusRing.visible = false;\n }\n\n /**\n * Saves the last focused element focuses the new element based on\n * `defaultFocus`, and animates open.\n */\n protected onOpened = () => {\n this.lastFocusedElement = getFocusedElement();\n\n if (!this.listElement) return;\n\n const items = this.listElement.items;\n const activeItemRecord = List.getActiveItem(items);\n\n if (activeItemRecord && this.defaultFocus !== 'NONE') {\n activeItemRecord.item.active = false;\n }\n\n switch (this.defaultFocus) {\n case 'FIRST_ITEM':\n const first = List.getFirstActivatableItem(items);\n if (first) {\n first.active = true;\n }\n break;\n case 'LAST_ITEM':\n const last = List.getLastActivatableItem(items);\n if (last) {\n last.active = true;\n }\n break;\n case 'LIST_ROOT':\n this.listElement?.focus();\n break;\n default:\n case 'NONE':\n // Do nothing.\n break;\n }\n\n if (this.quick) {\n this.dispatchEvent(new Event('opened'));\n } else {\n this.animateOpen();\n }\n };\n\n /**\n * Animates closed.\n */\n protected beforeClose = async () => {\n this.open = false;\n\n if (!this.quick) {\n await this.animateClose();\n }\n };\n\n /**\n * Focuses the last focused element.\n */\n protected onClosed = () => {\n if (this.quick) {\n this.dispatchEvent(new Event('closed'));\n }\n\n if (!this.skipRestoreFocus) {\n this.lastFocusedElement?.focus?.();\n }\n };\n\n /**\n * Performs the opening animation:\n *\n * https://direct.googleplex.com/#/spec/295000003+271060003\n */\n protected animateOpen() {\n const surfaceEl = this.surfaceEl;\n const slotEl = this.slotEl;\n\n if (!surfaceEl || !slotEl) return;\n\n const openDirection = this.openDirection;\n this.dispatchEvent(new Event('opening'));\n // needs to be imperative because we don't want to mix animation and Lit\n // render timing\n surfaceEl.classList.toggle('animating', true);\n\n const signal = this.openCloseAnimationSignal.start();\n const height = surfaceEl.offsetHeight;\n const openingUpwards = openDirection === 'UP';\n const children = this.items;\n const FULL_DURATION = 500;\n const SURFACE_OPACITY_DURATION = 50;\n const ITEM_OPACITY_DURATION = 250;\n // We want to fit every child fade-in animation within the full duration of\n // the animation.\n const DELAY_BETWEEN_ITEMS =\n (FULL_DURATION - ITEM_OPACITY_DURATION) / children.length;\n\n const surfaceHeightAnimation =\n surfaceEl.animate([{height: '0px'}, {height: `${height}px`}], {\n duration: FULL_DURATION,\n easing: EASING.EMPHASIZED,\n });\n // When we are opening upwards, we want to make sure the last item is always\n // in view, so we need to translate it upwards the opposite direction of the\n // height animation\n const upPositionCorrectionAnimation = slotEl.animate(\n [\n {transform: openingUpwards ? `translateY(-${height}px)` : ''},\n {transform: ''}\n ],\n {duration: FULL_DURATION, easing: EASING.EMPHASIZED});\n\n const surfaceOpacityAnimation = surfaceEl.animate(\n [{opacity: 0}, {opacity: 1}], SURFACE_OPACITY_DURATION);\n\n const childrenAnimations: Array<[HTMLElement, Animation]> = [];\n\n for (let i = 0; i < children.length; i++) {\n // If we are animating upwards, then reverse the children list.\n const directionalIndex = openingUpwards ? children.length - 1 - i : i;\n const child = children[directionalIndex];\n const animation = child.animate([{opacity: 0}, {opacity: 1}], {\n duration: ITEM_OPACITY_DURATION,\n delay: DELAY_BETWEEN_ITEMS * i,\n });\n\n // Make them all initially hidden and then clean up at the end of each\n // animation.\n child.classList.toggle('hidden', true);\n animation.addEventListener('finish', () => {\n child.classList.toggle('hidden', false);\n });\n\n childrenAnimations.push([child, animation]);\n }\n\n signal.addEventListener('abort', () => {\n surfaceHeightAnimation.cancel();\n upPositionCorrectionAnimation.cancel();\n surfaceOpacityAnimation.cancel();\n childrenAnimations.forEach(([child, animation]) => {\n child.classList.toggle('hidden', false);\n animation.cancel();\n });\n });\n\n surfaceHeightAnimation.addEventListener('finish', () => {\n surfaceEl.classList.toggle('animating', false);\n this.openCloseAnimationSignal.finish();\n this.dispatchEvent(new Event('opened'));\n });\n }\n\n /**\n * Performs the closing animation:\n *\n * https://direct.googleplex.com/#/spec/295000003+271060003\n */\n protected animateClose() {\n let resolve!: (value: unknown) => void;\n let reject!: () => void;\n\n // This promise blocks the surface position controller from setting\n // display: none on the surface which will interfere with this animation.\n const animationEnded = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n const surfaceEl = this.surfaceEl;\n const slotEl = this.slotEl;\n\n if (!surfaceEl || !slotEl) {\n reject();\n return animationEnded;\n }\n\n const openDirection = this.openDirection;\n const closingDownwards = openDirection === 'UP';\n this.dispatchEvent(new Event('closing'));\n // needs to be imperative because we don't want to mix animation and Lit\n // render timing\n surfaceEl.classList.toggle('animating', true);\n const signal = this.openCloseAnimationSignal.start();\n const height = surfaceEl.offsetHeight;\n const children = this.items;\n const FULL_DURATION = 150;\n const SURFACE_OPACITY_DURATION = 50;\n // The surface fades away at the very end\n const SURFACE_OPACITY_DELAY = FULL_DURATION - SURFACE_OPACITY_DURATION;\n const ITEM_OPACITY_DURATION = 50;\n const ITEM_OPACITY_INITIAL_DELAY = 50;\n const END_HEIGHT_PRECENTAGE = .35;\n\n // We want to fit every child fade-out animation within the full duration of\n // the animation.\n const DELAY_BETWEEN_ITEMS =\n (FULL_DURATION - ITEM_OPACITY_INITIAL_DELAY - ITEM_OPACITY_DURATION) /\n children.length;\n\n // The mock has the animation shrink to 35%\n const surfaceHeightAnimation = surfaceEl.animate(\n [\n {height: `${height}px`},\n {height: `${height * END_HEIGHT_PRECENTAGE}px`}\n ],\n {\n duration: FULL_DURATION,\n easing: EASING.EMPHASIZED_ACCELERATE,\n });\n\n // When we are closing downwards, we want to make sure the last item is\n // always in view, so we need to translate it upwards the opposite direction\n // of the height animation\n const downPositionCorrectionAnimation = slotEl.animate(\n [\n {transform: ''}, {\n transform: closingDownwards ?\n `translateY(-${height * (1 - END_HEIGHT_PRECENTAGE)}px)` :\n ''\n }\n ],\n {duration: FULL_DURATION, easing: EASING.EMPHASIZED_ACCELERATE});\n\n const surfaceOpacityAnimation = surfaceEl.animate(\n [{opacity: 1}, {opacity: 0}],\n {duration: SURFACE_OPACITY_DURATION, delay: SURFACE_OPACITY_DELAY});\n\n const childrenAnimations: Array<[HTMLElement, Animation]> = [];\n\n for (let i = 0; i < children.length; i++) {\n // If the animation is closing upwards, then reverse the list of\n // children so that we animate in the opposite direction.\n const directionalIndex = closingDownwards ? i : children.length - 1 - i;\n const child = children[directionalIndex];\n const animation = child.animate([{opacity: 1}, {opacity: 0}], {\n duration: ITEM_OPACITY_DURATION,\n delay: ITEM_OPACITY_INITIAL_DELAY + DELAY_BETWEEN_ITEMS * i,\n });\n\n // Make sure the items stay hidden at the end of each child animation.\n // We clean this up at the end of the overall animation.\n animation.addEventListener('finish', () => {\n child.classList.toggle('hidden', true);\n });\n childrenAnimations.push([child, animation]);\n }\n\n signal.addEventListener('abort', () => {\n surfaceHeightAnimation.cancel();\n downPositionCorrectionAnimation.cancel();\n surfaceOpacityAnimation.cancel();\n childrenAnimations.forEach(([child, animation]) => {\n animation.cancel();\n child.classList.toggle('hidden', false);\n });\n reject();\n });\n\n surfaceHeightAnimation.addEventListener('finish', () => {\n surfaceEl.classList.toggle('animating', false);\n childrenAnimations.forEach(([child]) => {\n child.classList.toggle('hidden', false);\n });\n this.openCloseAnimationSignal.finish();\n this.dispatchEvent(new Event('closed'));\n resolve(true);\n });\n\n return animationEnded;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n if (window && window.addEventListener) {\n window.addEventListener('click', this.onWindowClick, {capture: true});\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n if (window && window.removeEventListener) {\n window.removeEventListener('click', this.onWindowClick);\n }\n }\n\n protected onWindowClick = (e: MouseEvent) => {\n if (!this.stayOpenOnOutsideClick && !e.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n protected onCloseMenu(e: Event) {\n this.close();\n }\n\n protected onDeactivateItems(e: Event) {\n e.stopPropagation();\n const items = this.items;\n for (const item of items) {\n item.active = false;\n }\n }\n\n override focus() {\n this.listElement?.focus();\n }\n\n close() {\n this.open = false;\n this.items.forEach(item => {\n item.close?.();\n });\n }\n\n show() {\n this.open = true;\n }\n}\n"]}
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["menu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// Required for @ariaProperty\n// tslint:disable:no-new-decorators\nimport '../../list/list.js';\nimport '../../focus/focus-ring.js';\nimport '../../elevation/elevation.js';\n\nimport {html, isServer, LitElement} from 'lit';\nimport {eventOptions, property, query, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.js';\n\nimport {ariaProperty} from '../../decorators/aria-property.js';\nimport {MdFocusRing} from '../../focus/focus-ring.js';\nimport {pointerPress, shouldShowStrongFocus} from '../../focus/strong-focus.js';\nimport {List} from '../../list/lib/list.js';\nimport {createAnimationSignal, EASING} from '../../motion/animation.js';\nimport {ARIARole} from '../../types/aria.js';\n\nimport {ActivateTypeaheadEvent, DeactivateTypeaheadEvent, MenuItem} from './shared.js';\nimport {Corner, SurfacePositionController, SurfacePositionTarget} from './surfacePositionController.js';\nimport {TypeaheadController} from './typeaheadController.js';\n\nexport {Corner} from './surfacePositionController.js';\n\n/**\n * The default value for the typeahead buffer time in Milliseconds.\n */\nexport const DEFAULT_TYPEAHEAD_BUFFER_TIME = 200;\n\n/**\n * Element to focus on when menu is first opened.\n */\nexport type DefaultFocusState = 'NONE'|'LIST_ROOT'|'FIRST_ITEM'|'LAST_ITEM';\n\n/**\n * Gets the currently focused element on the page.\n *\n * @param activeDoc The document or shadowroot from which to start the search.\n * Defaults to `window.document`\n * @return Returns the currently deeply focused element or `null` if none.\n */\nfunction getFocusedElement(activeDoc: Document|ShadowRoot = document):\n HTMLElement|null {\n const activeEl = activeDoc.activeElement as HTMLElement | null;\n\n if (!activeEl) {\n return null;\n }\n\n if (activeEl.shadowRoot) {\n return getFocusedElement(activeEl.shadowRoot) ?? activeEl;\n }\n\n return activeEl;\n}\n\n/**\n * @fires opening Fired before the opening animation begins\n * @fires opened Fired once the menu is open, after any animations\n * @fires closing Fired before the closing animation begins\n * @fires closed Fired once the menu is closed, after any animations\n */\nexport abstract class Menu extends LitElement {\n @query('md-list') protected readonly listElement!: List|null;\n @query('.menu') protected readonly surfaceEl!: HTMLElement|null;\n @query('slot') protected readonly slotEl!: HTMLSlotElement|null;\n @query('md-focus-ring') protected readonly focusRing!: MdFocusRing;\n\n @ariaProperty\n @property({type: String, attribute: 'data-aria-label', noAccessor: true})\n override ariaLabel!: string;\n\n /**\n * The element in which the menu should align to.\n */\n @property({attribute: false})\n anchor: HTMLElement&Partial<SurfacePositionTarget>|null = null;\n /**\n * Makes the element use `position:fixed` instead of `position:absolute`. In\n * most cases, the menu should position itself above most other\n * `position:absolute` or `position:fixed` elements when placed inside of\n * them. e.g. using a menu inside of an `md-dialog`.\n *\n * __NOTE__: Fixed menus will not scroll with the page and will be fixed to\n * the window instead.\n */\n @property({type: Boolean}) fixed = false;\n /**\n * Skips the opening and closing animations.\n */\n @property({type: Boolean}) quick = false;\n /**\n * Displays overflow content like a submenu.\n *\n * __NOTE__: This may cause adverse effects if you set\n * `md-menu {max-height:...}`\n * and have items overflowing items in the \"y\" direction.\n */\n @property({type: Boolean, attribute: 'has-overflow'}) hasOverflow = false;\n /**\n * Opens the menu and makes it visible. Alternative to the `.show()` and\n * `.close()` methods\n */\n @property({type: Boolean, reflect: true}) open = false;\n /**\n * Offsets the menu's inline alignment from the anchor by the given number in\n * pixels. This value is direction aware and will follow the LTR / RTL\n * direction.\n *\n * e.g. LTR: positive -> right, negative -> left\n * RTL: positive -> left, negative -> right\n */\n @property({type: Number, attribute: 'x-offset'}) xOffset = 0;\n /**\n * Offsets the menu's block alignment from the anchor by the given number in\n * pixels.\n *\n * e.g. positive -> down, negative -> up\n */\n @property({type: Number, attribute: 'y-offset'}) yOffset = 0;\n /**\n * The tabindex of the underlying list element.\n */\n @property({type: Number, attribute: 'list-tab-index'}) listTabIndex = 0;\n /**\n * The role of the underlying list element.\n */\n @ariaProperty\n @property({type: String, attribute: 'data-role', noAccessor: true})\n override role: ARIARole = 'list';\n /**\n * The max time between the keystrokes of the typeahead menu behavior before\n * it clears the typeahead buffer.\n */\n @property({type: Number, attribute: 'typeahead-delay'})\n typeaheadBufferTime = DEFAULT_TYPEAHEAD_BUFFER_TIME;\n /**\n * The corner of the anchor which to align the menu in the standard logical\n * property style of <block>_<inline>.\n */\n @property({type: String, attribute: 'anchor-corner'})\n anchorCorner: Corner = 'END_START';\n /**\n * The corner of the menu which to align the anchor in the standard logical\n * property style of <block>_<inline>.\n */\n @property({type: String, attribute: 'menu-corner'})\n menuCorner: Corner = 'START_START';\n /**\n * Keeps the user clicks outside the menu\n */\n @property({type: Boolean, attribute: 'stay-open-on-outside-click'})\n stayOpenOnOutsideClick = false;\n /**\n * After closing, does not restore focus to the last focused element before\n * the menu was opened.\n */\n @property({type: Boolean, attribute: 'skip-restore-focus'})\n skipRestoreFocus = false;\n /**\n * The element that should be focused by default once opened.\n */\n @property({type: String, attribute: 'default-focus'})\n defaultFocus: DefaultFocusState = 'LIST_ROOT';\n\n @state() protected typeaheadActive = true;\n\n protected openCloseAnimationSignal = createAnimationSignal();\n\n /**\n * Whether the menu is animating upwards or downwards when opening. This is\n * helpful for calculating some animation calculations.\n */\n protected get openDirection(): 'UP'|'DOWN' {\n const menuCornerBlock = this.menuCorner.split('_')[0];\n return menuCornerBlock === 'START' ? 'DOWN' : 'UP';\n }\n\n /**\n * The element that was focused before the menu opened.\n */\n protected lastFocusedElement: HTMLElement|null = null;\n\n /**\n * Handles typeahead navigation through the menu.\n */\n typeaheadController = new TypeaheadController(() => {\n return {\n getItems: () => this.items,\n typeaheadBufferTime: this.typeaheadBufferTime,\n active: this.typeaheadActive\n };\n });\n\n /**\n * Handles positioning the surface and aligning it to the anchor.\n */\n protected menuPositionController = new SurfacePositionController(this, () => {\n return {\n anchorCorner: this.anchorCorner,\n surfaceCorner: this.menuCorner,\n surfaceEl: this.surfaceEl,\n anchorEl: this.anchor,\n isTopLayer: this.fixed,\n isOpen: this.open,\n xOffset: this.xOffset,\n yOffset: this.yOffset,\n onOpen: this.onOpened,\n beforeClose: this.beforeClose,\n onClose: this.onClosed,\n };\n });\n\n /**\n * The menu items associated with this menu. The items must be `MenuItem`s and\n * have both the `md-menu-item` and `md-list-item` attributes.\n */\n get items(): MenuItem[] {\n const listElement = this.listElement;\n\n if (listElement) {\n return listElement.items.filter(el => el.hasAttribute('md-menu-item')) as\n MenuItem[];\n }\n\n return [];\n }\n\n override render() {\n return this.renderSurface();\n }\n\n /**\n * Renders the positionable surface element and its contents.\n */\n protected renderSurface() {\n // TODO(b/274140618): elevation should be an underlay, not an overlay that\n // tints content\n return html`\n <div\n class=\"menu ${classMap(this.getSurfaceClasses())}\"\n style=${styleMap(this.menuPositionController.surfaceStyles)}>\n ${this.renderList()}\n ${this.renderElevation()}\n ${this.renderFocusRing()}\n </div>\n `;\n }\n\n /**\n * Renders the List element and its items\n */\n protected renderList() {\n return html`\n <md-list\n .ariaLabel=${this.ariaLabel}\n .role=${this.role}\n listTabIndex=${this.listTabIndex}\n @focus=${this.handleListFocus}\n @blur=${this.handleListBlur}\n @click=${this.handleListClick}\n @keydown=${this.handleListKeydown}>\n ${this.renderMenuItems()}\n </md-list>`;\n }\n\n /**\n * Renders the menu items' slot\n */\n protected renderMenuItems() {\n return html`<slot\n @close-menu=${this.onCloseMenu}\n @deactivate-items=${this.onDeactivateItems}\n @deactivate-typeahead=${this.handleDeactivateTypeahead}\n @activate-typeahead=${this.handleActivateTypeahead}></slot>`;\n }\n\n /**\n * Renders the elevation component.\n */\n protected renderElevation() {\n return html`<md-elevation shadow surface></md-elevation>`;\n }\n\n /**\n * Renders the focus ring component.\n */\n protected renderFocusRing() {\n return html`<md-focus-ring></md-focus-ring>`;\n }\n\n protected getSurfaceClasses() {\n return {\n open: this.open,\n fixed: this.fixed,\n 'has-overflow': this.hasOverflow,\n };\n }\n\n protected handleListFocus() {\n this.focusRing.visible = shouldShowStrongFocus();\n }\n\n protected handleListClick() {\n pointerPress();\n this.focusRing.visible = shouldShowStrongFocus();\n }\n\n // Capture so that we can grab the event before it reaches the list item\n // istelf. Specifically useful for the case where typeahead encounters a space\n // and we don't want the menu item to close the menu.\n @eventOptions({capture: true})\n protected handleListKeydown(e: KeyboardEvent) {\n this.typeaheadController.onKeydown(e);\n }\n\n protected handleListBlur() {\n this.focusRing.visible = false;\n }\n\n /**\n * Saves the last focused element focuses the new element based on\n * `defaultFocus`, and animates open.\n */\n protected onOpened = () => {\n this.lastFocusedElement = getFocusedElement();\n\n if (!this.listElement) return;\n\n const items = this.listElement.items;\n const activeItemRecord = List.getActiveItem(items);\n\n if (activeItemRecord && this.defaultFocus !== 'NONE') {\n activeItemRecord.item.active = false;\n }\n\n switch (this.defaultFocus) {\n case 'FIRST_ITEM':\n const first = List.getFirstActivatableItem(items);\n if (first) {\n first.active = true;\n }\n break;\n case 'LAST_ITEM':\n const last = List.getLastActivatableItem(items);\n if (last) {\n last.active = true;\n }\n break;\n case 'LIST_ROOT':\n this.listElement?.focus();\n break;\n default:\n case 'NONE':\n // Do nothing.\n break;\n }\n\n if (this.quick) {\n this.dispatchEvent(new Event('opening'));\n this.dispatchEvent(new Event('opened'));\n } else {\n this.animateOpen();\n }\n };\n\n /**\n * Animates closed.\n */\n protected beforeClose = async () => {\n this.open = false;\n\n if (!this.skipRestoreFocus) {\n this.lastFocusedElement?.focus?.();\n }\n\n if (!this.quick) {\n await this.animateClose();\n }\n };\n\n /**\n * Focuses the last focused element.\n */\n protected onClosed = () => {\n if (this.quick) {\n this.dispatchEvent(new Event('closing'));\n this.dispatchEvent(new Event('closed'));\n }\n };\n\n /**\n * Performs the opening animation:\n *\n * https://direct.googleplex.com/#/spec/295000003+271060003\n */\n protected animateOpen() {\n const surfaceEl = this.surfaceEl;\n const slotEl = this.slotEl;\n\n if (!surfaceEl || !slotEl) return;\n\n const openDirection = this.openDirection;\n this.dispatchEvent(new Event('opening'));\n // needs to be imperative because we don't want to mix animation and Lit\n // render timing\n surfaceEl.classList.toggle('animating', true);\n\n const signal = this.openCloseAnimationSignal.start();\n const height = surfaceEl.offsetHeight;\n const openingUpwards = openDirection === 'UP';\n const children = this.items;\n const FULL_DURATION = 500;\n const SURFACE_OPACITY_DURATION = 50;\n const ITEM_OPACITY_DURATION = 250;\n // We want to fit every child fade-in animation within the full duration of\n // the animation.\n const DELAY_BETWEEN_ITEMS =\n (FULL_DURATION - ITEM_OPACITY_DURATION) / children.length;\n\n const surfaceHeightAnimation =\n surfaceEl.animate([{height: '0px'}, {height: `${height}px`}], {\n duration: FULL_DURATION,\n easing: EASING.EMPHASIZED,\n });\n // When we are opening upwards, we want to make sure the last item is always\n // in view, so we need to translate it upwards the opposite direction of the\n // height animation\n const upPositionCorrectionAnimation = slotEl.animate(\n [\n {transform: openingUpwards ? `translateY(-${height}px)` : ''},\n {transform: ''}\n ],\n {duration: FULL_DURATION, easing: EASING.EMPHASIZED});\n\n const surfaceOpacityAnimation = surfaceEl.animate(\n [{opacity: 0}, {opacity: 1}], SURFACE_OPACITY_DURATION);\n\n const childrenAnimations: Array<[HTMLElement, Animation]> = [];\n\n for (let i = 0; i < children.length; i++) {\n // If we are animating upwards, then reverse the children list.\n const directionalIndex = openingUpwards ? children.length - 1 - i : i;\n const child = children[directionalIndex];\n const animation = child.animate([{opacity: 0}, {opacity: 1}], {\n duration: ITEM_OPACITY_DURATION,\n delay: DELAY_BETWEEN_ITEMS * i,\n });\n\n // Make them all initially hidden and then clean up at the end of each\n // animation.\n child.classList.toggle('hidden', true);\n animation.addEventListener('finish', () => {\n child.classList.toggle('hidden', false);\n });\n\n childrenAnimations.push([child, animation]);\n }\n\n signal.addEventListener('abort', () => {\n surfaceHeightAnimation.cancel();\n upPositionCorrectionAnimation.cancel();\n surfaceOpacityAnimation.cancel();\n childrenAnimations.forEach(([child, animation]) => {\n child.classList.toggle('hidden', false);\n animation.cancel();\n });\n });\n\n surfaceHeightAnimation.addEventListener('finish', () => {\n surfaceEl.classList.toggle('animating', false);\n this.openCloseAnimationSignal.finish();\n this.dispatchEvent(new Event('opened'));\n });\n }\n\n /**\n * Performs the closing animation:\n *\n * https://direct.googleplex.com/#/spec/295000003+271060003\n */\n protected animateClose() {\n let resolve!: (value: unknown) => void;\n let reject!: () => void;\n\n // This promise blocks the surface position controller from setting\n // display: none on the surface which will interfere with this animation.\n const animationEnded = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n const surfaceEl = this.surfaceEl;\n const slotEl = this.slotEl;\n\n if (!surfaceEl || !slotEl) {\n reject();\n return animationEnded;\n }\n\n const openDirection = this.openDirection;\n const closingDownwards = openDirection === 'UP';\n this.dispatchEvent(new Event('closing'));\n // needs to be imperative because we don't want to mix animation and Lit\n // render timing\n surfaceEl.classList.toggle('animating', true);\n const signal = this.openCloseAnimationSignal.start();\n const height = surfaceEl.offsetHeight;\n const children = this.items;\n const FULL_DURATION = 150;\n const SURFACE_OPACITY_DURATION = 50;\n // The surface fades away at the very end\n const SURFACE_OPACITY_DELAY = FULL_DURATION - SURFACE_OPACITY_DURATION;\n const ITEM_OPACITY_DURATION = 50;\n const ITEM_OPACITY_INITIAL_DELAY = 50;\n const END_HEIGHT_PRECENTAGE = .35;\n\n // We want to fit every child fade-out animation within the full duration of\n // the animation.\n const DELAY_BETWEEN_ITEMS =\n (FULL_DURATION - ITEM_OPACITY_INITIAL_DELAY - ITEM_OPACITY_DURATION) /\n children.length;\n\n // The mock has the animation shrink to 35%\n const surfaceHeightAnimation = surfaceEl.animate(\n [\n {height: `${height}px`},\n {height: `${height * END_HEIGHT_PRECENTAGE}px`}\n ],\n {\n duration: FULL_DURATION,\n easing: EASING.EMPHASIZED_ACCELERATE,\n });\n\n // When we are closing downwards, we want to make sure the last item is\n // always in view, so we need to translate it upwards the opposite direction\n // of the height animation\n const downPositionCorrectionAnimation = slotEl.animate(\n [\n {transform: ''}, {\n transform: closingDownwards ?\n `translateY(-${height * (1 - END_HEIGHT_PRECENTAGE)}px)` :\n ''\n }\n ],\n {duration: FULL_DURATION, easing: EASING.EMPHASIZED_ACCELERATE});\n\n const surfaceOpacityAnimation = surfaceEl.animate(\n [{opacity: 1}, {opacity: 0}],\n {duration: SURFACE_OPACITY_DURATION, delay: SURFACE_OPACITY_DELAY});\n\n const childrenAnimations: Array<[HTMLElement, Animation]> = [];\n\n for (let i = 0; i < children.length; i++) {\n // If the animation is closing upwards, then reverse the list of\n // children so that we animate in the opposite direction.\n const directionalIndex = closingDownwards ? i : children.length - 1 - i;\n const child = children[directionalIndex];\n const animation = child.animate([{opacity: 1}, {opacity: 0}], {\n duration: ITEM_OPACITY_DURATION,\n delay: ITEM_OPACITY_INITIAL_DELAY + DELAY_BETWEEN_ITEMS * i,\n });\n\n // Make sure the items stay hidden at the end of each child animation.\n // We clean this up at the end of the overall animation.\n animation.addEventListener('finish', () => {\n child.classList.toggle('hidden', true);\n });\n childrenAnimations.push([child, animation]);\n }\n\n signal.addEventListener('abort', () => {\n surfaceHeightAnimation.cancel();\n downPositionCorrectionAnimation.cancel();\n surfaceOpacityAnimation.cancel();\n childrenAnimations.forEach(([child, animation]) => {\n animation.cancel();\n child.classList.toggle('hidden', false);\n });\n reject();\n });\n\n surfaceHeightAnimation.addEventListener('finish', () => {\n surfaceEl.classList.toggle('animating', false);\n childrenAnimations.forEach(([child]) => {\n child.classList.toggle('hidden', false);\n });\n this.openCloseAnimationSignal.finish();\n this.dispatchEvent(new Event('closed'));\n resolve(true);\n });\n\n return animationEnded;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n if (!isServer) {\n window.addEventListener('click', this.onWindowClick, {capture: true});\n }\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n if (!isServer) {\n window.removeEventListener('click', this.onWindowClick, {capture: true});\n }\n }\n\n protected onWindowClick = (e: MouseEvent) => {\n if (!this.stayOpenOnOutsideClick && !e.composedPath().includes(this)) {\n this.open = false;\n }\n };\n\n protected onCloseMenu(e: Event) {\n this.close();\n }\n\n protected onDeactivateItems(e: Event) {\n e.stopPropagation();\n const items = this.items;\n for (const item of items) {\n item.active = false;\n }\n }\n\n protected handleDeactivateTypeahead(e: DeactivateTypeaheadEvent) {\n // stopPropagation so that this does not deactivate any typeaheads in menus\n // nested above it e.g. md-sub-menu-item\n e.stopPropagation();\n this.typeaheadActive = false;\n }\n\n protected handleActivateTypeahead(e: ActivateTypeaheadEvent) {\n // stopPropagation so that this does not activate any typeaheads in menus\n // nested above it e.g. md-sub-menu-item\n e.stopPropagation();\n this.typeaheadActive = true;\n }\n\n override focus() {\n this.listElement?.focus();\n }\n\n close() {\n this.open = false;\n this.items.forEach(item => {\n item.close?.();\n });\n }\n\n show() {\n this.open = true;\n }\n}\n"]}
@@ -4,47 +4,54 @@
4
4
  //
5
5
 
6
6
  // go/keep-sorted start
7
+ @use 'sass:list';
7
8
  @use 'sass:map';
8
9
  @use 'sass:string';
9
10
  // go/keep-sorted end
10
11
  // go/keep-sorted start
11
- @use '../../../elevation/lib/elevation';
12
- @use '../../../focus/focus-ring';
13
- @use '../../../list/list';
14
- @use '../../../list/list-item';
15
12
  @use '../../../ripple/ripple';
16
- @use '../../../sass/map-ext';
17
- @use '../../../sass/string-ext';
18
13
  @use '../../../sass/theme';
19
- @use '../../../sass/typography';
20
14
  @use '../../../tokens';
21
15
  // go/keep-sorted end
22
16
 
23
17
  $_custom-property-prefix: 'menu';
24
18
 
25
19
  @mixin theme($theme) {
26
- $reference: resolve-tokens(tokens.md-comp-menu-values());
27
- $theme: theme.validate-theme($reference, $theme);
28
- $theme: resolve-tokens($theme);
20
+ $theme: theme.validate-theme(tokens.md-comp-menu-values(), $theme);
21
+ $theme: _resolve-tokens($theme);
29
22
  $theme: theme.create-theme-vars($theme, $_custom-property-prefix);
30
23
 
31
24
  @include theme.emit-theme-vars($theme);
32
25
  }
33
26
 
34
27
  @mixin styles() {
35
- :host([active]) .list-item {
36
- background-color: var(--_list-item-selected-container-color);
28
+ $tokens: tokens.md-comp-menu-values();
29
+ $tokens: _resolve-tokens($tokens);
30
+ $tokens: theme.create-theme-vars($tokens, $_custom-property-prefix);
31
+
32
+ :host {
33
+ @each $token, $value in $tokens {
34
+ --_#{$token}: #{$value};
35
+ }
36
+ }
37
+
38
+ .list-item {
39
+ :host([active]) &,
40
+ :host(:active) &,
41
+ &:focus {
42
+ background-color: var(--_list-item-selected-container-color);
43
+ }
37
44
  }
38
45
 
39
46
  /*
40
- Set the ripple opacity to 0 if there is a submenu that is hovered.
41
- */
47
+ Set the ripple opacity to 0 if there is a submenu that is hovered.
48
+ */
42
49
  .list-item:has(.submenu:hover) {
43
50
  /*
44
- Have to use ripple theme directly because :has selector in this case does
45
- not work in this case with the :has selector, thus we cannot override the
46
- custom props set in :host
47
- */
51
+ Have to use ripple theme directly because :has selector in this case does
52
+ not work in this case with the :has selector, thus we cannot override the
53
+ custom props set in :host
54
+ */
48
55
  @include ripple.theme(
49
56
  (
50
57
  hover-opacity: 0,
@@ -53,71 +60,24 @@ $_custom-property-prefix: 'menu';
53
60
  }
54
61
  }
55
62
 
56
- @function resolve-tokens($tokens) {
57
- $list-item-tokens: ();
58
- $tokens: map-ext.duplicate-key(
59
- $tokens,
60
- list-item-container-height,
61
- list-item-one-line-container-height
62
- );
63
-
64
- @each $token, $value in $tokens {
65
- $index: string.index($token, list-item);
66
- $with-leading-index: string.index($token, list-item-with-leading-icon-);
67
- $with-trailing-index: string.index($token, list-item-with-trailing-icon-);
68
-
69
- @if $index {
70
- // Replace list-item-with-leading-icon-focus-icon-color
71
- // with list-item-focus-leading-icon-icon-color
72
- // and replace list-item-with-leading-icon-leading-icon-size
73
- // with list-item-leading-icon-size
74
- @if $with-leading-index {
75
- $token: string-ext.replace(
76
- $token,
77
- list-item-with-leading-icon-,
78
- list-item-
79
- );
80
- $leading-index: string.index($token, -leading-);
81
- @if not $leading-index {
82
- $token: string-ext.replace($token, -icon-, -leading-icon-icon-);
83
- }
84
- }
63
+ @function _resolve-tokens($tokens) {
64
+ @return _remove-unused-tokens($tokens);
65
+ }
85
66
 
86
- // Replace list-item-with-trailing-icon-focus-icon-color
87
- // with list-item-focus-trailing-icon-icon-color
88
- // and replace list-item-with-trailing-icon-trailing-icon-size
89
- // with list-item-trailing-icon-size
90
- @if $with-trailing-index {
91
- $token: string-ext.replace(
92
- $token,
93
- list-item-with-trailing-icon-,
94
- list-item-
95
- );
96
- $trailing-index: string.index($token, -trailing-);
97
- @if not $trailing-index {
98
- $token: string-ext.replace($token, -icon-, -trailing-icon-icon-);
99
- }
100
- }
67
+ // removes unused tokens
68
+ @function _remove-unused-tokens($tokens) {
69
+ $unused-tokens: ();
70
+ @each $token in map-keys($tokens) {
71
+ $index: string.index($token, 'list-item');
101
72
 
102
- $list-item-tokens: map.set($list-item-tokens, $token, $value);
73
+ @if not $index {
74
+ $unused-tokens: list.append($unused-tokens, $token);
103
75
  }
104
76
  }
105
77
 
106
- $list-item-tokens: typography.resolve-tokens(
107
- $list-item-tokens,
108
- 'list-item-label-text'
109
- );
110
-
111
- @return $list-item-tokens;
112
- }
113
-
114
- @mixin private-props() {
115
- $tokens: resolve-tokens(tokens.md-comp-menu-values());
116
- $tokens: theme.create-theme-vars($tokens, menu);
117
-
118
- :host {
119
- @each $token, $value in $tokens {
120
- --_#{$token}: #{$value};
121
- }
78
+ @each $token in $unused-tokens {
79
+ $tokens: map.remove($tokens, $token);
122
80
  }
81
+
82
+ @return $tokens;
123
83
  }
@@ -4,6 +4,6 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { css } from 'lit';
7
- export const styles = css `:host([active]) .list-item{background-color:var(--_list-item-selected-container-color)}.list-item:has(.submenu:hover){--md-ripple-hover-opacity:0}/*# sourceMappingURL=menu-item-styles.css.map */
7
+ export const styles = css `:host{--_list-item-selected-container-color: var(--md-menu-list-item-selected-container-color, var(--md-sys-color-surface-variant, #e7e0ec))}:host([active]) .list-item,:host(:active) .list-item,.list-item:focus{background-color:var(--_list-item-selected-container-color)}.list-item:has(.submenu:hover){--md-ripple-hover-opacity:0}/*# sourceMappingURL=menu-item-styles.css.map */
8
8
  `;
9
9
  //# sourceMappingURL=menu-item-styles.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item-styles.css.js","sourceRoot":"","sources":["menu-item-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host([active]) .list-item{background-color:var(--_list-item-selected-container-color)}.list-item:has(.submenu:hover){--md-ripple-hover-opacity:0}/*# sourceMappingURL=menu-item-styles.css.map */\n`;\n "]}
1
+ {"version":3,"file":"menu-item-styles.css.js","sourceRoot":"","sources":["menu-item-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--_list-item-selected-container-color: var(--md-menu-list-item-selected-container-color, var(--md-sys-color-surface-variant, #e7e0ec))}:host([active]) .list-item,:host(:active) .list-item,.list-item:focus{background-color:var(--_list-item-selected-container-color)}.list-item:has(.submenu:hover){--md-ripple-hover-opacity:0}/*# sourceMappingURL=menu-item-styles.css.map */\n`;\n "]}
@@ -36,7 +36,7 @@ export class MenuItemEl extends ListItemEl {
36
36
  if (this.keepOpen)
37
37
  return;
38
38
  const keyCode = e.code;
39
- if (isClosableKey(keyCode)) {
39
+ if (!e.defaultPrevented && isClosableKey(keyCode)) {
40
40
  e.preventDefault();
41
41
  this.dispatchEvent(new DefaultCloseMenuEvent(this, { kind: CLOSE_REASON.KEYDOWN, key: keyCode }));
42
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item.js","sourceRoot":"","sources":["menu-item.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAC,UAAU,EAAC,MAAM,yCAAyC,CAAC;AAEnE,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAW,MAAM,cAAc,CAAC;AAE1F;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IAA1C;;QACW,SAAI,GAAa,UAAU,CAAC;QACrC;;WAEG;QAEH,eAAU,GAAG,IAAI,CAAC;QAElB;;WAEG;QACgD,aAAQ,GAAG,KAAK,CAAC;QAEpE;;WAEG;QACO,oBAAe,GAAG,KAAK,CAAC;IAkBpC,CAAC;IAhBoB,OAAO;QACxB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAElD,IAAI,CAAC,aAAa,CACd,IAAI,qBAAqB,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,eAAe,EAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEkB,SAAS,CAAC,CAAgB;QAC3C,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;YAC1B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,qBAAqB,CACxC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC;SACxD;IACH,CAAC;CACF;AA7BC;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;8CAClD;AAKlB;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAC,CAAC;;4CAAkB","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {property} from 'lit/decorators.js';\n\nimport {ListItemEl} from '../../../list/lib/listitem/list-item.js';\nimport {ARIARole} from '../../../types/aria.js';\nimport {CLOSE_REASON, DefaultCloseMenuEvent, isClosableKey, MenuItem} from '../shared.js';\n\n/**\n * @fires close-menu {CloseMenuEvent}\n */\nexport class MenuItemEl extends ListItemEl implements MenuItem {\n override role: ARIARole = 'menuitem';\n /**\n * READONLY: self-identifies as a menu item and sets its identifying attribute\n */\n @property({type: Boolean, attribute: 'md-menu-item', reflect: true})\n isMenuItem = true;\n\n /**\n * Keeps the menu open if clicked or keyboard selected.\n */\n @property({type: Boolean, attribute: 'keep-open'}) keepOpen = false;\n\n /**\n * Used for overriding e.g. sub-menu-item.\n */\n protected keepOpenOnClick = false;\n\n protected override onClick() {\n if (this.keepOpen || this.keepOpenOnClick) return;\n\n this.dispatchEvent(\n new DefaultCloseMenuEvent(this, {kind: CLOSE_REASON.CLICK_SELECTION}));\n }\n\n protected override onKeydown(e: KeyboardEvent) {\n if (this.keepOpen) return;\n const keyCode = e.code;\n if (isClosableKey(keyCode)) {\n e.preventDefault();\n this.dispatchEvent(new DefaultCloseMenuEvent(\n this, {kind: CLOSE_REASON.KEYDOWN, key: keyCode}));\n }\n }\n}\n"]}
1
+ {"version":3,"file":"menu-item.js","sourceRoot":"","sources":["menu-item.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAC,UAAU,EAAC,MAAM,yCAAyC,CAAC;AAEnE,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAW,MAAM,cAAc,CAAC;AAE1F;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IAA1C;;QACW,SAAI,GAAa,UAAU,CAAC;QACrC;;WAEG;QAEH,eAAU,GAAG,IAAI,CAAC;QAElB;;WAEG;QACgD,aAAQ,GAAG,KAAK,CAAC;QAEpE;;WAEG;QACO,oBAAe,GAAG,KAAK,CAAC;IAmBpC,CAAC;IAjBoB,OAAO;QACxB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAElD,IAAI,CAAC,aAAa,CACd,IAAI,qBAAqB,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,eAAe,EAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEkB,SAAS,CAAC,CAAgB;QAC3C,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;QAEvB,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;YACjD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,qBAAqB,CACxC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC;SACxD;IACH,CAAC;CACF;AA9BC;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;8CAClD;AAKlB;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAC,CAAC;;4CAAkB","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {property} from 'lit/decorators.js';\n\nimport {ListItemEl} from '../../../list/lib/listitem/list-item.js';\nimport {ARIARole} from '../../../types/aria.js';\nimport {CLOSE_REASON, DefaultCloseMenuEvent, isClosableKey, MenuItem} from '../shared.js';\n\n/**\n * @fires close-menu {CloseMenuEvent}\n */\nexport class MenuItemEl extends ListItemEl implements MenuItem {\n override role: ARIARole = 'menuitem';\n /**\n * READONLY: self-identifies as a menu item and sets its identifying attribute\n */\n @property({type: Boolean, attribute: 'md-menu-item', reflect: true})\n isMenuItem = true;\n\n /**\n * Keeps the menu open if clicked or keyboard selected.\n */\n @property({type: Boolean, attribute: 'keep-open'}) keepOpen = false;\n\n /**\n * Used for overriding e.g. sub-menu-item.\n */\n protected keepOpenOnClick = false;\n\n protected override onClick() {\n if (this.keepOpen || this.keepOpenOnClick) return;\n\n this.dispatchEvent(\n new DefaultCloseMenuEvent(this, {kind: CLOSE_REASON.CLICK_SELECTION}));\n }\n\n protected override onKeydown(e: KeyboardEvent) {\n if (this.keepOpen) return;\n const keyCode = e.code;\n\n if (!e.defaultPrevented && isClosableKey(keyCode)) {\n e.preventDefault();\n this.dispatchEvent(new DefaultCloseMenuEvent(\n this, {kind: CLOSE_REASON.KEYDOWN, key: keyCode}));\n }\n }\n}\n"]}
@@ -34,7 +34,8 @@ export class MenuItemLink extends ListItemLink {
34
34
  return;
35
35
  const keyCode = e.code;
36
36
  // Do not preventDefault on enter or else it will prevent from opening links
37
- if (isClosableKey(keyCode) && keyCode !== SELECTION_KEY.ENTER) {
37
+ if (!e.defaultPrevented && isClosableKey(keyCode) &&
38
+ keyCode !== SELECTION_KEY.ENTER) {
38
39
  e.preventDefault();
39
40
  this.dispatchEvent(new DefaultCloseMenuEvent(this, { kind: CLOSE_REASON.KEYDOWN, key: keyCode }));
40
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item-link.js","sourceRoot":"","sources":["menu-item-link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAC,YAAY,EAAC,MAAM,kDAAkD,CAAC;AAE9E,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAY,aAAa,EAAC,MAAM,cAAc,CAAC;AAEzG;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;IAA9C;;QACW,SAAI,GAAa,UAAU,CAAC;QACrC;;WAEG;QAEH,eAAU,GAAG,IAAI,CAAC;QAElB;;WAEG;QACgD,aAAQ,GAAG,KAAK,CAAC;QAE1D,oBAAe,GAAG,KAAK,CAAC;IAoBpC,CAAC;IAlBoB,OAAO;QACxB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAElD,IAAI,CAAC,aAAa,CACd,IAAI,qBAAqB,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,eAAe,EAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEkB,SAAS,CAAC,CAAgB;QAC3C,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,4EAA4E;QAC5E,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,aAAa,CAAC,KAAK,EAAE;YAC7D,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,qBAAqB,CACxC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC;SACxD;IACH,CAAC;CACF;AA5BC;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;gDAClD;AAKlB;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAC,CAAC;;8CAAkB","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {property} from 'lit/decorators.js';\n\nimport {ListItemLink} from '../../../list/lib/listitemlink/list-item-link.js';\nimport {ARIARole} from '../../../types/aria.js';\nimport {CLOSE_REASON, DefaultCloseMenuEvent, isClosableKey, MenuItem, SELECTION_KEY} from '../shared.js';\n\n/**\n * @fires close-menu {CloseMenuEvent}\n */\nexport class MenuItemLink extends ListItemLink implements MenuItem {\n override role: ARIARole = 'menuitem';\n /**\n * READONLY: self-identifies as a menu item and sets its identifying attribute\n */\n @property({type: Boolean, attribute: 'md-menu-item', reflect: true})\n isMenuItem = true;\n\n /**\n * Keeps the menu open if clicked or keyboard selected.\n */\n @property({type: Boolean, attribute: 'keep-open'}) keepOpen = false;\n\n protected keepOpenOnClick = false;\n\n protected override onClick() {\n if (this.keepOpen || this.keepOpenOnClick) return;\n\n this.dispatchEvent(\n new DefaultCloseMenuEvent(this, {kind: CLOSE_REASON.CLICK_SELECTION}));\n }\n\n protected override onKeydown(e: KeyboardEvent) {\n if (this.keepOpen) return;\n\n const keyCode = e.code;\n // Do not preventDefault on enter or else it will prevent from opening links\n if (isClosableKey(keyCode) && keyCode !== SELECTION_KEY.ENTER) {\n e.preventDefault();\n this.dispatchEvent(new DefaultCloseMenuEvent(\n this, {kind: CLOSE_REASON.KEYDOWN, key: keyCode}));\n }\n }\n}\n"]}
1
+ {"version":3,"file":"menu-item-link.js","sourceRoot":"","sources":["menu-item-link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAC,YAAY,EAAC,MAAM,kDAAkD,CAAC;AAE9E,OAAO,EAAC,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAY,aAAa,EAAC,MAAM,cAAc,CAAC;AAEzG;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,YAAY;IAA9C;;QACW,SAAI,GAAa,UAAU,CAAC;QACrC;;WAEG;QAEH,eAAU,GAAG,IAAI,CAAC;QAElB;;WAEG;QACgD,aAAQ,GAAG,KAAK,CAAC;QAE1D,oBAAe,GAAG,KAAK,CAAC;IAqBpC,CAAC;IAnBoB,OAAO;QACxB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO;QAElD,IAAI,CAAC,aAAa,CACd,IAAI,qBAAqB,CAAC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,eAAe,EAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEkB,SAAS,CAAC,CAAgB;QAC3C,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,4EAA4E;QAC5E,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,aAAa,CAAC,OAAO,CAAC;YAC7C,OAAO,KAAK,aAAa,CAAC,KAAK,EAAE;YACnC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,IAAI,qBAAqB,CACxC,IAAI,EAAE,EAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC,CAAC,CAAC;SACxD;IACH,CAAC;CACF;AA7BC;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;;gDAClD;AAKlB;IAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAC,CAAC;;8CAAkB","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {property} from 'lit/decorators.js';\n\nimport {ListItemLink} from '../../../list/lib/listitemlink/list-item-link.js';\nimport {ARIARole} from '../../../types/aria.js';\nimport {CLOSE_REASON, DefaultCloseMenuEvent, isClosableKey, MenuItem, SELECTION_KEY} from '../shared.js';\n\n/**\n * @fires close-menu {CloseMenuEvent}\n */\nexport class MenuItemLink extends ListItemLink implements MenuItem {\n override role: ARIARole = 'menuitem';\n /**\n * READONLY: self-identifies as a menu item and sets its identifying attribute\n */\n @property({type: Boolean, attribute: 'md-menu-item', reflect: true})\n isMenuItem = true;\n\n /**\n * Keeps the menu open if clicked or keyboard selected.\n */\n @property({type: Boolean, attribute: 'keep-open'}) keepOpen = false;\n\n protected keepOpenOnClick = false;\n\n protected override onClick() {\n if (this.keepOpen || this.keepOpenOnClick) return;\n\n this.dispatchEvent(\n new DefaultCloseMenuEvent(this, {kind: CLOSE_REASON.CLICK_SELECTION}));\n }\n\n protected override onKeydown(e: KeyboardEvent) {\n if (this.keepOpen) return;\n\n const keyCode = e.code;\n // Do not preventDefault on enter or else it will prevent from opening links\n if (!e.defaultPrevented && isClosableKey(keyCode) &&\n keyCode !== SELECTION_KEY.ENTER) {\n e.preventDefault();\n this.dispatchEvent(new DefaultCloseMenuEvent(\n this, {kind: CLOSE_REASON.KEYDOWN, key: keyCode}));\n }\n }\n}\n"]}