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

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 (534) hide show
  1. package/README.md +4 -4
  2. package/autocomplete/autocomplete-item.js.map +1 -1
  3. package/autocomplete/autocomplete-list.js.map +1 -1
  4. package/autocomplete/autocomplete-surface.js.map +1 -1
  5. package/autocomplete/filled-autocomplete.d.ts +0 -2
  6. package/autocomplete/filled-autocomplete.js +0 -7
  7. package/autocomplete/filled-autocomplete.js.map +1 -1
  8. package/autocomplete/lib/_filled-autocomplete.scss +22 -28
  9. package/autocomplete/lib/_outlined-autocomplete.scss +23 -29
  10. package/autocomplete/lib/_shared.scss +6 -10
  11. package/autocomplete/lib/autocomplete.d.ts +2 -2
  12. package/autocomplete/lib/autocomplete.js +4 -5
  13. package/autocomplete/lib/autocomplete.js.map +1 -1
  14. package/autocomplete/lib/autocompletelist/autocomplete-list-styles.scss +2 -0
  15. package/autocomplete/lib/autocompletesurface/autocomplete-surface-styles.scss +2 -0
  16. package/autocomplete/lib/filled-styles.css.js +1 -1
  17. package/autocomplete/lib/filled-styles.css.js.map +1 -1
  18. package/autocomplete/lib/filled-styles.scss +2 -0
  19. package/autocomplete/lib/outlined-styles.css.js +1 -1
  20. package/autocomplete/lib/outlined-styles.css.js.map +1 -1
  21. package/autocomplete/lib/outlined-styles.scss +2 -0
  22. package/autocomplete/lib/shared-styles.scss +2 -0
  23. package/autocomplete/outlined-autocomplete.d.ts +0 -2
  24. package/autocomplete/outlined-autocomplete.js +0 -7
  25. package/autocomplete/outlined-autocomplete.js.map +1 -1
  26. package/badge/badge.js.map +1 -1
  27. package/badge/lib/_badge.scss +10 -13
  28. package/badge/lib/badge-styles.css.js +1 -1
  29. package/badge/lib/badge-styles.css.js.map +1 -1
  30. package/badge/lib/badge-styles.scss +2 -0
  31. package/badge/lib/badge.js.map +1 -1
  32. package/button/elevated-button.js.map +1 -1
  33. package/button/elevated-link-button.js.map +1 -1
  34. package/button/filled-button.js.map +1 -1
  35. package/button/filled-link-button.js.map +1 -1
  36. package/button/lib/_elevated-button.scss +10 -15
  37. package/button/lib/_elevation.scss +4 -1
  38. package/button/lib/_filled-button.scss +12 -14
  39. package/button/lib/_icon.scss +1 -0
  40. package/button/lib/_outlined-button.scss +10 -15
  41. package/button/lib/_shared.scss +14 -19
  42. package/button/lib/_text-button.scss +12 -14
  43. package/button/lib/_tonal-button.scss +10 -15
  44. package/button/lib/button.js.map +1 -1
  45. package/button/lib/elevated-styles.css.js +1 -1
  46. package/button/lib/elevated-styles.css.js.map +1 -1
  47. package/button/lib/elevated-styles.scss +2 -0
  48. package/button/lib/filled-styles.css.js +1 -1
  49. package/button/lib/filled-styles.css.js.map +1 -1
  50. package/button/lib/filled-styles.scss +2 -0
  51. package/button/lib/link-button.js.map +1 -1
  52. package/button/lib/outlined-styles.css.js +1 -1
  53. package/button/lib/outlined-styles.css.js.map +1 -1
  54. package/button/lib/outlined-styles.scss +2 -0
  55. package/button/lib/shared-elevation-styles.scss +2 -0
  56. package/button/lib/shared-styles.css.js +1 -1
  57. package/button/lib/shared-styles.css.js.map +1 -1
  58. package/button/lib/shared-styles.scss +2 -0
  59. package/button/lib/text-styles.css.js +1 -1
  60. package/button/lib/text-styles.css.js.map +1 -1
  61. package/button/lib/text-styles.scss +2 -0
  62. package/button/lib/tonal-styles.css.js +1 -1
  63. package/button/lib/tonal-styles.css.js.map +1 -1
  64. package/button/lib/tonal-styles.scss +2 -0
  65. package/button/outlined-button.js.map +1 -1
  66. package/button/outlined-link-button.js.map +1 -1
  67. package/button/text-button.js.map +1 -1
  68. package/button/text-link-button.js.map +1 -1
  69. package/button/tonal-button.js.map +1 -1
  70. package/button/tonal-link-button.js.map +1 -1
  71. package/checkbox/checkbox.js.map +1 -1
  72. package/checkbox/lib/_checkbox.scss +26 -31
  73. package/checkbox/lib/checkbox-styles.css.js +1 -1
  74. package/checkbox/lib/checkbox-styles.css.js.map +1 -1
  75. package/checkbox/lib/checkbox-styles.scss +2 -0
  76. package/checkbox/lib/checkbox.js +6 -6
  77. package/checkbox/lib/checkbox.js.map +1 -1
  78. package/checkbox/lib/forced-colors-styles.scss +2 -0
  79. package/chips/action/delete-action.js.map +1 -1
  80. package/chips/action/lib/action.js +4 -4
  81. package/chips/action/lib/action.js.map +1 -1
  82. package/chips/action/lib/link-action.js +1 -1
  83. package/chips/action/lib/link-action.js.map +1 -1
  84. package/chips/action/lib/primary-action.js.map +1 -1
  85. package/chips/action/lib/selectable-action.js.map +1 -1
  86. package/chips/action/link-action.js.map +1 -1
  87. package/chips/action/presentational-action.js.map +1 -1
  88. package/chips/action/primary-action.js.map +1 -1
  89. package/chips/action/selectable-action.js.map +1 -1
  90. package/chips/chip/lib/_assist-chip-theme.scss +4 -0
  91. package/chips/chip/lib/_chip-theme.scss +29 -40
  92. package/chips/chip/lib/_chip.scss +2 -0
  93. package/chips/chip/lib/_filter-chip-theme.scss +4 -0
  94. package/chips/chip/lib/_input-chip-theme.scss +4 -0
  95. package/chips/chip/lib/_suggestion-chip-theme.scss +4 -0
  96. package/chips/chip/lib/chip.js.map +1 -1
  97. package/chips/chip/lib/foundation.js +4 -4
  98. package/chips/chip/lib/foundation.js.map +1 -1
  99. package/chips/chip/lib/link-chip.js.map +1 -1
  100. package/chips/chip/lib/selectable-chip.js.map +1 -1
  101. package/chips/chip/lib/types.d.ts +2 -2
  102. package/chips/chipset/lib/_chip-set-theme.scss +2 -0
  103. package/chips/chipset/lib/_chip-set.scss +2 -0
  104. package/chips/chipset/lib/foundation.js +3 -3
  105. package/chips/chipset/lib/foundation.js.map +1 -1
  106. package/chips/chipset/lib/types.d.ts +3 -3
  107. package/controller/events.js +4 -0
  108. package/controller/events.js.map +1 -1
  109. package/controller/form-controller.js.map +1 -1
  110. package/controller/foundation.d.ts +1 -1
  111. package/controller/observer.d.ts +2 -2
  112. package/dialog/dialog.js.map +1 -1
  113. package/dialog/harness.d.ts +2 -2
  114. package/dialog/harness.js +11 -8
  115. package/dialog/harness.js.map +1 -1
  116. package/dialog/lib/_dialog.scss +7 -11
  117. package/dialog/lib/_tokens.scss +9 -6
  118. package/dialog/lib/dialog-styles.css.js +1 -1
  119. package/dialog/lib/dialog-styles.css.js.map +1 -1
  120. package/dialog/lib/dialog-styles.scss +2 -0
  121. package/dialog/lib/dialog.js +9 -7
  122. package/dialog/lib/dialog.js.map +1 -1
  123. package/divider/divider.js.map +1 -1
  124. package/divider/lib/_divider.scss +2 -0
  125. package/divider/lib/divider-styles.scss +2 -0
  126. package/divider/lib/divider.js.map +1 -1
  127. package/elevation/elevation.js.map +1 -1
  128. package/elevation/lib/_elevation.scss +4 -0
  129. package/elevation/lib/_md-comp-elevation.scss +4 -0
  130. package/elevation/lib/elevation-styles.scss +2 -0
  131. package/elevation/lib/elevation.js.map +1 -1
  132. package/fab/fab-extended.js.map +1 -1
  133. package/fab/fab.js.map +1 -1
  134. package/fab/lib/_fab-extended.scss +18 -11
  135. package/fab/lib/_fab.scss +7 -2
  136. package/fab/lib/_shared.scss +16 -8
  137. package/fab/lib/fab-extended-styles.css.js +1 -1
  138. package/fab/lib/fab-extended-styles.css.js.map +1 -1
  139. package/fab/lib/fab-extended-styles.scss +2 -0
  140. package/fab/lib/fab-shared-styles.css.js +1 -1
  141. package/fab/lib/fab-shared-styles.css.js.map +1 -1
  142. package/fab/lib/fab-shared-styles.scss +2 -0
  143. package/fab/lib/fab-shared.d.ts +9 -15
  144. package/fab/lib/fab-shared.js +21 -33
  145. package/fab/lib/fab-shared.js.map +1 -1
  146. package/fab/lib/fab-styles.css.js +1 -1
  147. package/fab/lib/fab-styles.css.js.map +1 -1
  148. package/fab/lib/fab-styles.scss +2 -0
  149. package/field/filled-field.d.ts +1 -1
  150. package/field/filled-field.js +1 -1
  151. package/field/filled-field.js.map +1 -1
  152. package/field/harness.js +1 -1
  153. package/field/harness.js.map +1 -1
  154. package/field/lib/_content.scss +35 -50
  155. package/field/lib/_filled-field.scss +60 -79
  156. package/field/lib/_label.scss +26 -63
  157. package/field/lib/_md-comp-filled-field.scss +14 -2
  158. package/field/lib/_md-comp-outlined-field.scss +15 -4
  159. package/field/lib/_outlined-field.scss +96 -110
  160. package/field/lib/_shared.scss +13 -35
  161. package/field/lib/_supporting-text.scss +25 -52
  162. package/field/lib/field.d.ts +14 -31
  163. package/field/lib/field.js +77 -97
  164. package/field/lib/field.js.map +1 -1
  165. package/field/lib/filled-field.d.ts +10 -16
  166. package/field/lib/filled-field.js +14 -37
  167. package/field/lib/filled-field.js.map +1 -1
  168. package/field/lib/filled-styles.css.js +1 -1
  169. package/field/lib/filled-styles.css.js.map +1 -1
  170. package/field/lib/outlined-field.d.ts +4 -10
  171. package/field/lib/outlined-field.js +13 -33
  172. package/field/lib/outlined-field.js.map +1 -1
  173. package/field/lib/outlined-styles.css.js +1 -1
  174. package/field/lib/outlined-styles.css.js.map +1 -1
  175. package/field/lib/shared-styles.css.js +1 -1
  176. package/field/lib/shared-styles.css.js.map +1 -1
  177. package/field/outlined-field.d.ts +1 -1
  178. package/field/outlined-field.js +1 -1
  179. package/field/outlined-field.js.map +1 -1
  180. package/focus/focus-ring.js.map +1 -1
  181. package/focus/lib/_focus-ring.scss +7 -13
  182. package/focus/lib/_md-comp-focus-ring.scss +4 -0
  183. package/focus/lib/focus-ring-styles.css.js +1 -1
  184. package/focus/lib/focus-ring-styles.css.js.map +1 -1
  185. package/focus/lib/focus-ring-styles.scss +2 -0
  186. package/focus/lib/focus-ring.js.map +1 -1
  187. package/icon/icon.js.map +1 -1
  188. package/icon/lib/_icon.scss +2 -0
  189. package/icon/lib/icon-styles.scss +2 -0
  190. package/iconbutton/filled-icon-button-toggle.js.map +1 -1
  191. package/iconbutton/filled-icon-button.js.map +1 -1
  192. package/iconbutton/filled-link-icon-button.js.map +1 -1
  193. package/iconbutton/filled-tonal-icon-button-toggle.js.map +1 -1
  194. package/iconbutton/filled-tonal-icon-button.js.map +1 -1
  195. package/iconbutton/filled-tonal-link-icon-button.js.map +1 -1
  196. package/iconbutton/lib/_filled-icon-button.scss +19 -19
  197. package/iconbutton/lib/_filled-tonal-icon-button.scss +19 -19
  198. package/iconbutton/lib/_outlined-icon-button.scss +20 -16
  199. package/iconbutton/lib/_shared.scss +8 -8
  200. package/iconbutton/lib/_standard-icon-button.scss +21 -18
  201. package/iconbutton/lib/filled-styles.css.js +1 -1
  202. package/iconbutton/lib/filled-styles.css.js.map +1 -1
  203. package/iconbutton/lib/filled-styles.scss +2 -0
  204. package/iconbutton/lib/filled-tonal-styles.css.js +1 -1
  205. package/iconbutton/lib/filled-tonal-styles.css.js.map +1 -1
  206. package/iconbutton/lib/filled-tonal-styles.scss +2 -0
  207. package/iconbutton/lib/icon-button-toggle.js.map +1 -1
  208. package/iconbutton/lib/icon-button.js.map +1 -1
  209. package/iconbutton/lib/link-icon-button.js.map +1 -1
  210. package/iconbutton/lib/outlined-styles.css.js +1 -1
  211. package/iconbutton/lib/outlined-styles.css.js.map +1 -1
  212. package/iconbutton/lib/outlined-styles.scss +2 -0
  213. package/iconbutton/lib/shared-styles.scss +2 -0
  214. package/iconbutton/lib/standard-styles.css.js +1 -1
  215. package/iconbutton/lib/standard-styles.css.js.map +1 -1
  216. package/iconbutton/lib/standard-styles.scss +2 -0
  217. package/iconbutton/outlined-icon-button-toggle.js.map +1 -1
  218. package/iconbutton/outlined-icon-button.js.map +1 -1
  219. package/iconbutton/outlined-link-icon-button.js.map +1 -1
  220. package/iconbutton/standard-icon-button-toggle.js.map +1 -1
  221. package/iconbutton/standard-icon-button.js.map +1 -1
  222. package/iconbutton/standard-link-icon-button.js.map +1 -1
  223. package/list/lib/_list.scss +6 -2
  224. package/list/lib/avatar/_list-item-avatar.scss +2 -0
  225. package/list/lib/avatar/list-item-avatar-styles.scss +2 -0
  226. package/list/lib/avatar/list-item-avatar.js.map +1 -1
  227. package/list/lib/icon/_list-item-icon.scss +4 -0
  228. package/list/lib/icon/list-item-icon-styles.scss +2 -0
  229. package/list/lib/image/_list-item-image.scss +5 -1
  230. package/list/lib/image/list-item-image-styles.scss +2 -0
  231. package/list/lib/image/list-item-image.js.map +1 -1
  232. package/list/lib/list-styles.css.js +1 -1
  233. package/list/lib/list-styles.css.js.map +1 -1
  234. package/list/lib/list-styles.scss +2 -0
  235. package/list/lib/list.js +3 -1
  236. package/list/lib/list.js.map +1 -1
  237. package/list/lib/listitem/_list-item.scss +31 -30
  238. package/list/lib/listitem/list-item-private-styles.css.js +1 -1
  239. package/list/lib/listitem/list-item-private-styles.css.js.map +1 -1
  240. package/list/lib/listitem/list-item-private-styles.scss +2 -0
  241. package/list/lib/listitem/list-item-styles.css.js +1 -1
  242. package/list/lib/listitem/list-item-styles.css.js.map +1 -1
  243. package/list/lib/listitem/list-item-styles.scss +2 -0
  244. package/list/lib/listitem/list-item.d.ts +1 -1
  245. package/list/lib/listitem/list-item.js +3 -1
  246. package/list/lib/listitem/list-item.js.map +1 -1
  247. package/list/lib/listitemlink/list-item-link.js.map +1 -1
  248. package/list/lib/video/_list-item-video.scss +5 -1
  249. package/list/lib/video/list-item-video-styles.scss +2 -0
  250. package/list/lib/video/list-item-video.js.map +1 -1
  251. package/list/list-item-avatar.js.map +1 -1
  252. package/list/list-item-icon.js.map +1 -1
  253. package/list/list-item-image.js.map +1 -1
  254. package/list/list-item-link.js.map +1 -1
  255. package/list/list-item-video.js.map +1 -1
  256. package/list/list-item.js.map +1 -1
  257. package/list/list.js.map +1 -1
  258. package/menu/lib/_menu.scss +7 -4
  259. package/menu/lib/menu-styles.css.js +1 -1
  260. package/menu/lib/menu-styles.css.js.map +1 -1
  261. package/menu/lib/menu-styles.scss +2 -0
  262. package/menu/lib/menu.d.ts +1 -1
  263. package/menu/lib/menu.js.map +1 -1
  264. package/menu/lib/menuitem/_menu-item.scss +17 -9
  265. package/menu/lib/menuitem/menu-item-private-styles.css.js +1 -1
  266. package/menu/lib/menuitem/menu-item-private-styles.css.js.map +1 -1
  267. package/menu/lib/menuitem/menu-item-private-styles.scss +2 -0
  268. package/menu/lib/menuitem/menu-item-styles.css.js +1 -1
  269. package/menu/lib/menuitem/menu-item-styles.css.js.map +1 -1
  270. package/menu/lib/menuitem/menu-item-styles.scss +2 -0
  271. package/menu/lib/menuitem/menu-item.js.map +1 -1
  272. package/menu/lib/menuitemlink/menu-item-link.js.map +1 -1
  273. package/menu/lib/shared.d.ts +3 -3
  274. package/menu/lib/submenuitem/sub-menu-item.js.map +1 -1
  275. package/menu/lib/surfacePositionController.d.ts +1 -1
  276. package/menu/lib/typeaheadController.d.ts +1 -1
  277. package/menu/menu-item-link.js.map +1 -1
  278. package/menu/menu-item.js.map +1 -1
  279. package/menu/menu.js.map +1 -1
  280. package/menu/sub-menu-item.js.map +1 -1
  281. package/menusurface/lib/_md-comp-menu-surface.scss +4 -0
  282. package/menusurface/lib/_menu-surface.scss +4 -0
  283. package/menusurface/lib/foundation.js +31 -31
  284. package/menusurface/lib/foundation.js.map +1 -1
  285. package/menusurface/lib/menu-surface-styles.scss +2 -0
  286. package/menusurface/lib/menu-surface.d.ts +2 -2
  287. package/menusurface/lib/menu-surface.js.map +1 -1
  288. package/menusurface/menu-surface.js.map +1 -1
  289. package/navigationbar/lib/_navigation-bar.scss +2 -0
  290. package/navigationbar/lib/constants.d.ts +1 -1
  291. package/navigationbar/lib/navigation-bar-styles.scss +2 -0
  292. package/navigationbar/lib/navigation-bar.js.map +1 -1
  293. package/navigationbar/navigation-bar.js.map +1 -1
  294. package/navigationdrawer/lib/_navigation-drawer-modal.scss +11 -2
  295. package/navigationdrawer/lib/_navigation-drawer.scss +10 -5
  296. package/navigationdrawer/lib/_shared.scss +4 -8
  297. package/navigationdrawer/lib/navigation-drawer-modal-styles.css.js +1 -1
  298. package/navigationdrawer/lib/navigation-drawer-modal-styles.css.js.map +1 -1
  299. package/navigationdrawer/lib/navigation-drawer-modal-styles.scss +2 -0
  300. package/navigationdrawer/lib/navigation-drawer-modal.js.map +1 -1
  301. package/navigationdrawer/lib/navigation-drawer-styles.css.js +1 -1
  302. package/navigationdrawer/lib/navigation-drawer-styles.css.js.map +1 -1
  303. package/navigationdrawer/lib/navigation-drawer-styles.scss +2 -0
  304. package/navigationdrawer/lib/navigation-drawer.js.map +1 -1
  305. package/navigationdrawer/lib/shared-styles.scss +2 -0
  306. package/navigationdrawer/navigation-drawer-modal.js.map +1 -1
  307. package/navigationdrawer/navigation-drawer.js.map +1 -1
  308. package/navigationtab/lib/_navigation-tab.scss +26 -22
  309. package/navigationtab/lib/navigation-tab-styles.css.js +1 -1
  310. package/navigationtab/lib/navigation-tab-styles.css.js.map +1 -1
  311. package/navigationtab/lib/navigation-tab-styles.scss +2 -0
  312. package/navigationtab/lib/navigation-tab.js +4 -4
  313. package/navigationtab/lib/navigation-tab.js.map +1 -1
  314. package/navigationtab/navigation-tab.js.map +1 -1
  315. package/package.json +2 -2
  316. package/radio/lib/_radio.scss +16 -14
  317. package/radio/lib/forced-colors-styles.scss +2 -0
  318. package/radio/lib/radio-styles.css.js +1 -1
  319. package/radio/lib/radio-styles.css.js.map +1 -1
  320. package/radio/lib/radio-styles.scss +2 -0
  321. package/radio/lib/radio.js +21 -21
  322. package/radio/lib/radio.js.map +1 -1
  323. package/radio/radio.js.map +1 -1
  324. package/ripple/directive.d.ts +1 -33
  325. package/ripple/directive.js +7 -194
  326. package/ripple/directive.js.map +1 -1
  327. package/ripple/lib/_md-comp-ripple.scss +20 -19
  328. package/ripple/lib/_ripple.scss +20 -20
  329. package/ripple/lib/ripple-styles.css.js +1 -1
  330. package/ripple/lib/ripple-styles.css.js.map +1 -1
  331. package/ripple/lib/ripple-styles.scss +2 -0
  332. package/ripple/lib/ripple.d.ts +50 -48
  333. package/ripple/lib/ripple.js +214 -76
  334. package/ripple/lib/ripple.js.map +1 -1
  335. package/ripple/ripple.d.ts +9 -1
  336. package/ripple/ripple.js +9 -1
  337. package/ripple/ripple.js.map +1 -1
  338. package/sass/_assert.scss +2 -0
  339. package/sass/_color-scheme.scss +4 -0
  340. package/sass/_color.scss +4 -0
  341. package/sass/_elevation.scss +4 -0
  342. package/sass/_feature-flags.scss +2 -0
  343. package/sass/_map-ext.scss +2 -0
  344. package/sass/_resolvers.scss +4 -4
  345. package/sass/_shape.scss +75 -27
  346. package/sass/_string-ext.scss +44 -0
  347. package/sass/_theme.scss +4 -0
  348. package/sass/_typography.scss +18 -93
  349. package/sass/_var.scss +4 -0
  350. package/segmentedbutton/lib/_outlined-segmented-button.scss +4 -0
  351. package/segmentedbutton/lib/_shared.scss +18 -22
  352. package/segmentedbutton/lib/outlined-styles.css.js +1 -1
  353. package/segmentedbutton/lib/outlined-styles.css.js.map +1 -1
  354. package/segmentedbutton/lib/outlined-styles.scss +2 -0
  355. package/segmentedbutton/lib/segmented-button.js +4 -4
  356. package/segmentedbutton/lib/segmented-button.js.map +1 -1
  357. package/segmentedbutton/lib/shared-styles.css.js +1 -1
  358. package/segmentedbutton/lib/shared-styles.css.js.map +1 -1
  359. package/segmentedbutton/lib/shared-styles.scss +2 -0
  360. package/segmentedbutton/outlined-segmented-button.js.map +1 -1
  361. package/segmentedbuttonset/lib/_outlined-segmented-button-set.scss +9 -5
  362. package/segmentedbuttonset/lib/_shared.scss +0 -13
  363. package/segmentedbuttonset/lib/outlined-styles.css.js +1 -1
  364. package/segmentedbuttonset/lib/outlined-styles.css.js.map +1 -1
  365. package/segmentedbuttonset/lib/outlined-styles.scss +2 -0
  366. package/segmentedbuttonset/lib/segmented-button-set.js.map +1 -1
  367. package/segmentedbuttonset/lib/shared-styles.scss +2 -0
  368. package/segmentedbuttonset/outlined-segmented-button-set.js.map +1 -1
  369. package/slider/_slider.scss +6 -0
  370. package/slider/harness.d.ts +20 -0
  371. package/slider/harness.js +63 -0
  372. package/slider/harness.js.map +1 -0
  373. package/slider/lib/_slider.scss +503 -0
  374. package/slider/lib/_tokens.scss +66 -0
  375. package/slider/lib/forced-colors-styles.css.js +9 -0
  376. package/slider/lib/forced-colors-styles.css.js.map +1 -0
  377. package/slider/lib/forced-colors-styles.scss +53 -0
  378. package/slider/lib/slider-styles.css.js +9 -0
  379. package/slider/lib/slider-styles.css.js.map +1 -0
  380. package/slider/lib/slider-styles.scss +8 -0
  381. package/slider/lib/slider.d.ts +158 -0
  382. package/slider/lib/slider.js +575 -0
  383. package/slider/lib/slider.js.map +1 -0
  384. package/slider/slider.d.ts +28 -0
  385. package/slider/slider.js +32 -0
  386. package/slider/slider.js.map +1 -0
  387. package/switch/lib/README.md +55 -0
  388. package/switch/lib/_handle.scss +17 -18
  389. package/switch/lib/_icon.scss +4 -0
  390. package/switch/lib/_switch.scss +11 -18
  391. package/switch/lib/_track.scss +2 -0
  392. package/switch/lib/switch-styles.css.js +1 -1
  393. package/switch/lib/switch-styles.css.js.map +1 -1
  394. package/switch/lib/switch-styles.scss +2 -0
  395. package/switch/lib/switch.js +9 -9
  396. package/switch/lib/switch.js.map +1 -1
  397. package/switch/switch.js.map +1 -1
  398. package/textfield/filled-text-field.d.ts +1 -1
  399. package/textfield/filled-text-field.js +1 -2
  400. package/textfield/filled-text-field.js.map +1 -1
  401. package/textfield/harness.js +1 -1
  402. package/textfield/harness.js.map +1 -1
  403. package/textfield/lib/_filled-text-field.scss +25 -21
  404. package/textfield/lib/_icon.scss +41 -56
  405. package/textfield/lib/_input.scss +17 -36
  406. package/textfield/lib/_outlined-text-field.scss +26 -21
  407. package/textfield/lib/_shared.scss +10 -29
  408. package/textfield/lib/filled-forced-colors-styles.scss +2 -0
  409. package/textfield/lib/filled-styles.css.js +1 -1
  410. package/textfield/lib/filled-styles.css.js.map +1 -1
  411. package/textfield/lib/filled-styles.scss +2 -0
  412. package/textfield/lib/filled-text-field.d.ts +6 -5
  413. package/textfield/lib/filled-text-field.js +8 -7
  414. package/textfield/lib/filled-text-field.js.map +1 -1
  415. package/textfield/lib/outlined-forced-colors-styles.scss +2 -0
  416. package/textfield/lib/outlined-styles.css.js +1 -1
  417. package/textfield/lib/outlined-styles.css.js.map +1 -1
  418. package/textfield/lib/outlined-styles.scss +2 -0
  419. package/textfield/lib/outlined-text-field.d.ts +6 -5
  420. package/textfield/lib/outlined-text-field.js +8 -7
  421. package/textfield/lib/outlined-text-field.js.map +1 -1
  422. package/textfield/lib/shared-styles.css.js +1 -1
  423. package/textfield/lib/shared-styles.css.js.map +1 -1
  424. package/textfield/lib/shared-styles.scss +2 -0
  425. package/textfield/lib/text-field.d.ts +40 -88
  426. package/textfield/lib/text-field.js +194 -270
  427. package/textfield/lib/text-field.js.map +1 -1
  428. package/textfield/outlined-text-field.d.ts +1 -1
  429. package/textfield/outlined-text-field.js +1 -2
  430. package/textfield/outlined-text-field.js.map +1 -1
  431. package/tokens/_index.scss +1 -1
  432. package/tokens/{v0_152 → v0_160}/_md-comp-assist-chip.scss +1 -1
  433. package/tokens/{v0_152 → v0_160}/_md-comp-badge.scss +1 -1
  434. package/tokens/{v0_152 → v0_160}/_md-comp-banner.scss +1 -1
  435. package/tokens/{v0_152 → v0_160}/_md-comp-bottom-app-bar.scss +1 -1
  436. package/tokens/{v0_152 → v0_160}/_md-comp-carousel-item.scss +1 -1
  437. package/tokens/{v0_152 → v0_160}/_md-comp-checkbox.scss +4 -15
  438. package/tokens/{v0_152 → v0_160}/_md-comp-circular-progress-indicator.scss +1 -1
  439. package/tokens/{v0_152 → v0_160}/_md-comp-data-table.scss +1 -3
  440. package/tokens/{v0_152 → v0_160}/_md-comp-date-input-modal.scss +10 -10
  441. package/tokens/{v0_152 → v0_160}/_md-comp-date-picker-docked.scss +23 -23
  442. package/tokens/{v0_152 → v0_160}/_md-comp-date-picker-modal.scss +34 -34
  443. package/tokens/{v0_152 → v0_160}/_md-comp-dialog.scss +1 -1
  444. package/tokens/{v0_152 → v0_160}/_md-comp-divider.scss +1 -1
  445. package/tokens/{v0_152 → v0_160}/_md-comp-elevated-button.scss +1 -1
  446. package/tokens/{v0_152 → v0_160}/_md-comp-elevated-card.scss +1 -1
  447. package/tokens/{v0_152 → v0_160}/_md-comp-extended-fab-branded.scss +1 -1
  448. package/tokens/{v0_152 → v0_160}/_md-comp-extended-fab-primary.scss +1 -1
  449. package/tokens/{v0_152 → v0_160}/_md-comp-extended-fab-secondary.scss +1 -1
  450. package/tokens/{v0_152 → v0_160}/_md-comp-extended-fab-surface.scss +1 -1
  451. package/tokens/{v0_152 → v0_160}/_md-comp-extended-fab-tertiary.scss +1 -1
  452. package/tokens/{v0_152 → v0_160}/_md-comp-fab-branded-large.scss +1 -1
  453. package/tokens/{v0_152 → v0_160}/_md-comp-fab-branded.scss +1 -1
  454. package/tokens/{v0_152 → v0_160}/_md-comp-fab-primary-large.scss +1 -1
  455. package/tokens/{v0_152 → v0_160}/_md-comp-fab-primary-small.scss +1 -1
  456. package/tokens/{v0_152 → v0_160}/_md-comp-fab-primary.scss +1 -1
  457. package/tokens/{v0_152 → v0_160}/_md-comp-fab-secondary-large.scss +1 -1
  458. package/tokens/{v0_152 → v0_160}/_md-comp-fab-secondary-small.scss +1 -1
  459. package/tokens/{v0_152 → v0_160}/_md-comp-fab-secondary.scss +1 -1
  460. package/tokens/{v0_152 → v0_160}/_md-comp-fab-surface-large.scss +1 -1
  461. package/tokens/{v0_152 → v0_160}/_md-comp-fab-surface-small.scss +1 -1
  462. package/tokens/{v0_152 → v0_160}/_md-comp-fab-surface.scss +1 -1
  463. package/tokens/{v0_152 → v0_160}/_md-comp-fab-tertiary-large.scss +1 -1
  464. package/tokens/{v0_152 → v0_160}/_md-comp-fab-tertiary-small.scss +1 -1
  465. package/tokens/{v0_152 → v0_160}/_md-comp-fab-tertiary.scss +1 -1
  466. package/tokens/{v0_152 → v0_160}/_md-comp-filled-autocomplete.scss +1 -1
  467. package/tokens/{v0_152 → v0_160}/_md-comp-filled-button.scss +1 -1
  468. package/tokens/{v0_152 → v0_160}/_md-comp-filled-card.scss +1 -1
  469. package/tokens/{v0_152 → v0_160}/_md-comp-filled-icon-button.scss +1 -1
  470. package/tokens/{v0_152 → v0_160}/_md-comp-filled-menu-button.scss +1 -1
  471. package/tokens/{v0_152 → v0_160}/_md-comp-filled-select.scss +1 -1
  472. package/tokens/{v0_152 → v0_160}/_md-comp-filled-text-field.scss +1 -1
  473. package/tokens/{v0_152 → v0_160}/_md-comp-filled-tonal-button.scss +1 -1
  474. package/tokens/{v0_152 → v0_160}/_md-comp-filled-tonal-icon-button.scss +1 -1
  475. package/tokens/{v0_152 → v0_160}/_md-comp-filter-chip.scss +1 -1
  476. package/tokens/{v0_152 → v0_160}/_md-comp-full-screen-dialog.scss +1 -1
  477. package/tokens/{v0_152 → v0_160}/_md-comp-icon-button.scss +1 -1
  478. package/tokens/{v0_152 → v0_160}/_md-comp-input-chip.scss +1 -1
  479. package/tokens/{v0_152 → v0_160}/_md-comp-linear-progress-indicator.scss +1 -1
  480. package/tokens/{v0_152 → v0_160}/_md-comp-list.scss +1 -1
  481. package/tokens/{v0_152 → v0_160}/_md-comp-menu.scss +1 -1
  482. package/tokens/{v0_152 → v0_160}/_md-comp-navigation-bar.scss +1 -1
  483. package/tokens/{v0_152 → v0_160}/_md-comp-navigation-drawer.scss +1 -1
  484. package/tokens/{v0_152 → v0_160}/_md-comp-navigation-rail.scss +1 -1
  485. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-autocomplete.scss +1 -1
  486. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-button.scss +1 -1
  487. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-card.scss +1 -1
  488. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-icon-button.scss +1 -1
  489. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-menu-button.scss +1 -1
  490. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-segmented-button.scss +1 -1
  491. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-select.scss +1 -1
  492. package/tokens/{v0_152 → v0_160}/_md-comp-outlined-text-field.scss +1 -1
  493. package/tokens/{v0_152 → v0_160}/_md-comp-plain-tooltip.scss +1 -1
  494. package/tokens/{v0_152 → v0_160}/_md-comp-primary-navigation-tab.scss +1 -3
  495. package/tokens/{v0_152 → v0_160}/_md-comp-radio-button.scss +1 -1
  496. package/tokens/{v0_152 → v0_160}/_md-comp-rich-tooltip.scss +1 -1
  497. package/tokens/{v0_152 → v0_160}/_md-comp-scrim.scss +1 -1
  498. package/tokens/{v0_152 → v0_160}/_md-comp-search-bar.scss +1 -1
  499. package/tokens/{v0_152 → v0_160}/_md-comp-search-view.scss +1 -1
  500. package/tokens/{v0_152 → v0_160}/_md-comp-secondary-navigation-tab.scss +1 -3
  501. package/tokens/{v0_152 → v0_160}/_md-comp-sheet-bottom.scss +1 -1
  502. package/tokens/{v0_152 → v0_160}/_md-comp-sheet-floating.scss +1 -1
  503. package/tokens/{v0_152 → v0_160}/_md-comp-sheet-side.scss +10 -10
  504. package/tokens/{v0_152 → v0_160}/_md-comp-slider.scss +1 -1
  505. package/tokens/{v0_152 → v0_160}/_md-comp-snackbar.scss +1 -1
  506. package/tokens/{v0_152 → v0_160}/_md-comp-standard-menu-button.scss +1 -1
  507. package/tokens/{v0_152 → v0_160}/_md-comp-suggestion-chip.scss +1 -1
  508. package/tokens/{v0_152 → v0_160}/_md-comp-switch.scss +1 -1
  509. package/tokens/{v0_152 → v0_160}/_md-comp-text-button.scss +1 -1
  510. package/tokens/{v0_152 → v0_160}/_md-comp-time-input.scss +1 -1
  511. package/tokens/{v0_152 → v0_160}/_md-comp-time-picker.scss +1 -1
  512. package/tokens/{v0_152 → v0_160}/_md-comp-top-app-bar-large.scss +1 -1
  513. package/tokens/{v0_152 → v0_160}/_md-comp-top-app-bar-medium.scss +1 -1
  514. package/tokens/{v0_152 → v0_160}/_md-comp-top-app-bar-small-centered.scss +1 -1
  515. package/tokens/{v0_152 → v0_160}/_md-comp-top-app-bar-small.scss +1 -1
  516. package/tokens/{v0_152 → v0_160}/_md-ref-palette.scss +1 -1
  517. package/tokens/{v0_152 → v0_160}/_md-ref-typeface.scss +1 -1
  518. package/tokens/{v0_152 → v0_160}/_md-sys-color.scss +217 -1
  519. package/tokens/{v0_152 → v0_160}/_md-sys-elevation.scss +1 -1
  520. package/tokens/{v0_152 → v0_160}/_md-sys-motion.scss +1 -1
  521. package/tokens/{v0_152 → v0_160}/_md-sys-shape.scss +1 -1
  522. package/tokens/{v0_152 → v0_160}/_md-sys-state.scss +1 -1
  523. package/tokens/{v0_152 → v0_160}/_md-sys-typescale.scss +1 -1
  524. package/tokens/v0_160/index.test.css.d.ts +1 -0
  525. package/tokens/v0_160/lib.test.css.d.ts +1 -0
  526. /package/{tokens/v0_152/index.test.css.d.ts → slider/lib/forced-colors-styles.css.d.ts} +0 -0
  527. /package/{tokens/v0_152/lib.test.css.d.ts → slider/lib/slider-styles.css.d.ts} +0 -0
  528. /package/tokens/{v0_152 → v0_160}/_index.scss +0 -0
  529. /package/tokens/{v0_152 → v0_160}/index.test.css.js +0 -0
  530. /package/tokens/{v0_152 → v0_160}/index.test.css.js.map +0 -0
  531. /package/tokens/{v0_152 → v0_160}/index.test.scss +0 -0
  532. /package/tokens/{v0_152 → v0_160}/lib.test.css.js +0 -0
  533. /package/tokens/{v0_152 → v0_160}/lib.test.css.js.map +0 -0
  534. /package/tokens/{v0_152 → v0_160}/lib.test.scss +0 -0
@@ -3,6 +3,8 @@
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  //
5
5
 
6
+ // go/keep-sorted start
6
7
  @use './radio';
8
+ // go/keep-sorted end
7
9
 
8
10
  @include radio.styles;
@@ -21,6 +21,27 @@ const CHECKED = Symbol('checked');
21
21
  * A radio component.
22
22
  */
23
23
  export class Radio extends LitElement {
24
+ /**
25
+ * Whether or not the radio is selected.
26
+ */
27
+ get checked() {
28
+ return this[CHECKED];
29
+ }
30
+ set checked(checked) {
31
+ const wasChecked = this.checked;
32
+ if (wasChecked === checked) {
33
+ return;
34
+ }
35
+ this[CHECKED] = checked;
36
+ this.requestUpdate('checked', wasChecked);
37
+ this.selectionController.handleCheckedChange();
38
+ }
39
+ /**
40
+ * The associated form element with which this element's value will submit.
41
+ */
42
+ get form() {
43
+ return this.closest('form');
44
+ }
24
45
  constructor() {
25
46
  super();
26
47
  this[_a] = false;
@@ -56,27 +77,6 @@ export class Radio extends LitElement {
56
77
  dispatchActivationClick(this.input);
57
78
  });
58
79
  }
59
- /**
60
- * Whether or not the radio is selected.
61
- */
62
- get checked() {
63
- return this[CHECKED];
64
- }
65
- set checked(checked) {
66
- const wasChecked = this.checked;
67
- if (wasChecked === checked) {
68
- return;
69
- }
70
- this[CHECKED] = checked;
71
- this.requestUpdate('checked', wasChecked);
72
- this.selectionController.handleCheckedChange();
73
- }
74
- /**
75
- * The associated form element with which this element's value will submit.
76
- */
77
- get form() {
78
- return this.closest('form');
79
- }
80
80
  [(_a = CHECKED, getFormValue)]() {
81
81
  return this.checked ? this.value : null;
82
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","sourceRoot":"","sources":["radio.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../focus/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, LitElement, nothing, TemplateResult} from 'lit';\nimport {property, query, queryAsync, state} from 'lit/decorators.js';\nimport {when} from 'lit/directives/when.js';\n\nimport {dispatchActivationClick, isActivationClick, redispatchEvent} from '../../controller/events.js';\nimport {FormController, getFormValue} from '../../controller/form-controller.js';\nimport {ariaProperty} from '../../decorators/aria-property.js';\nimport {pointerPress, shouldShowStrongFocus} from '../../focus/strong-focus.js';\nimport {ripple} from '../../ripple/directive.js';\nimport {MdRipple} from '../../ripple/ripple.js';\n\nimport {SingleSelectionController} from './single-selection-controller.js';\n\nconst CHECKED = Symbol('checked');\n\n/**\n * A radio component.\n */\nexport class Radio extends LitElement {\n static override shadowRootOptions:\n ShadowRootInit = {...LitElement.shadowRootOptions, delegatesFocus: true};\n\n /**\n * @nocollapse\n */\n static formAssociated = true;\n\n /**\n * Whether or not the radio is selected.\n */\n @property({type: Boolean, reflect: true})\n get checked() {\n return this[CHECKED];\n }\n set checked(checked: boolean) {\n const wasChecked = this.checked;\n if (wasChecked === checked) {\n return;\n }\n\n this[CHECKED] = checked;\n this.requestUpdate('checked', wasChecked);\n this.selectionController.handleCheckedChange();\n }\n\n [CHECKED] = false;\n\n /**\n * Whether or not the radio is disabled.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * The element value to use in form submission when checked.\n */\n @property({type: String}) value = 'on';\n\n /**\n * The HTML name to use in form submission.\n */\n @property({type: String, reflect: true}) name = '';\n\n @ariaProperty // tslint:disable-line:no-new-decorators\n @property({attribute: 'data-aria-label', noAccessor: true})\n override ariaLabel!: string;\n\n /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this.closest('form');\n }\n\n @query('input') private readonly input!: HTMLInputElement|null;\n @queryAsync('md-ripple') private readonly ripple!: Promise<MdRipple|null>;\n private readonly selectionController = new SingleSelectionController(this);\n @state() private showFocusRing = false;\n @state() private showRipple = false;\n\n constructor() {\n super();\n this.addController(new FormController(this));\n this.addController(this.selectionController);\n this.addEventListener('click', (event: Event) => {\n if (!isActivationClick(event)) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.input!);\n });\n }\n\n [getFormValue]() {\n return this.checked ? this.value : null;\n }\n\n override focus() {\n this.input?.focus();\n }\n\n protected override render(): TemplateResult {\n return html`\n ${when(this.showRipple, this.renderRipple)}\n ${this.renderFocusRing()}\n <svg class=\"icon\" viewBox=\"0 0 20 20\">\n <mask id=\"cutout\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"black\" />\n </mask>\n <circle class=\"outer circle\" cx=\"10\" cy=\"10\" r=\"10\" mask=\"url(#cutout)\" />\n <circle class=\"inner circle\" cx=\"10\" cy=\"10\" r=\"5\" />\n </svg>\n <input\n type=\"radio\"\n name=${this.name}\n aria-label=${this.ariaLabel || nothing}\n .checked=${this.checked}\n .value=${this.value}\n ?disabled=${this.disabled}\n @change=${this.handleChange}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @pointerdown=${this.handlePointerDown}\n ${ripple(this.getRipple)}\n >\n `;\n }\n\n private handleBlur() {\n this.showFocusRing = false;\n }\n\n private handleFocus() {\n this.showFocusRing = shouldShowStrongFocus();\n }\n\n private handleChange(event: Event) {\n if (this.disabled) {\n return;\n }\n\n // Per spec, the change event on a radio input always represents checked.\n this.checked = true;\n redispatchEvent(this, event);\n }\n\n private handlePointerDown() {\n pointerPress();\n this.showFocusRing = shouldShowStrongFocus();\n }\n\n private readonly getRipple = () => {\n this.showRipple = true;\n return this.ripple;\n };\n\n private readonly renderRipple = () => {\n return html`<md-ripple unbounded ?disabled=${this.disabled}></md-ripple>`;\n };\n\n private renderFocusRing(): TemplateResult {\n return html`<md-focus-ring .visible=${this.showFocusRing}></md-focus-ring>`;\n }\n}\n"]}
1
+ {"version":3,"file":"radio.js","sourceRoot":"","sources":["radio.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../focus/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, LitElement, nothing, TemplateResult} from 'lit';\nimport {property, query, queryAsync, state} from 'lit/decorators.js';\nimport {when} from 'lit/directives/when.js';\n\nimport {dispatchActivationClick, isActivationClick, redispatchEvent} from '../../controller/events.js';\nimport {FormController, getFormValue} from '../../controller/form-controller.js';\nimport {ariaProperty} from '../../decorators/aria-property.js';\nimport {pointerPress, shouldShowStrongFocus} from '../../focus/strong-focus.js';\nimport {ripple} from '../../ripple/directive.js';\nimport {MdRipple} from '../../ripple/ripple.js';\n\nimport {SingleSelectionController} from './single-selection-controller.js';\n\nconst CHECKED = Symbol('checked');\n\n/**\n * A radio component.\n */\nexport class Radio extends LitElement {\n static override shadowRootOptions:\n ShadowRootInit = {...LitElement.shadowRootOptions, delegatesFocus: true};\n\n /**\n * @nocollapse\n */\n static formAssociated = true;\n\n /**\n * Whether or not the radio is selected.\n */\n @property({type: Boolean, reflect: true})\n get checked() {\n return this[CHECKED];\n }\n set checked(checked: boolean) {\n const wasChecked = this.checked;\n if (wasChecked === checked) {\n return;\n }\n\n this[CHECKED] = checked;\n this.requestUpdate('checked', wasChecked);\n this.selectionController.handleCheckedChange();\n }\n\n [CHECKED] = false;\n\n /**\n * Whether or not the radio is disabled.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * The element value to use in form submission when checked.\n */\n @property({type: String}) value = 'on';\n\n /**\n * The HTML name to use in form submission.\n */\n @property({type: String, reflect: true}) name = '';\n\n @ariaProperty // tslint:disable-line:no-new-decorators\n @property({attribute: 'data-aria-label', noAccessor: true})\n override ariaLabel!: string;\n\n /**\n * The associated form element with which this element's value will submit.\n */\n get form() {\n return this.closest('form');\n }\n\n @query('input') private readonly input!: HTMLInputElement|null;\n @queryAsync('md-ripple') private readonly ripple!: Promise<MdRipple|null>;\n private readonly selectionController = new SingleSelectionController(this);\n @state() private showFocusRing = false;\n @state() private showRipple = false;\n\n constructor() {\n super();\n this.addController(new FormController(this));\n this.addController(this.selectionController);\n this.addEventListener('click', (event: Event) => {\n if (!isActivationClick(event)) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.input!);\n });\n }\n\n [getFormValue]() {\n return this.checked ? this.value : null;\n }\n\n override focus() {\n this.input?.focus();\n }\n\n protected override render(): TemplateResult {\n return html`\n ${when(this.showRipple, this.renderRipple)}\n ${this.renderFocusRing()}\n <svg class=\"icon\" viewBox=\"0 0 20 20\">\n <mask id=\"cutout\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\" />\n <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"black\" />\n </mask>\n <circle class=\"outer circle\" cx=\"10\" cy=\"10\" r=\"10\" mask=\"url(#cutout)\" />\n <circle class=\"inner circle\" cx=\"10\" cy=\"10\" r=\"5\" />\n </svg>\n <input\n type=\"radio\"\n name=${this.name}\n aria-label=${this.ariaLabel || nothing}\n .checked=${this.checked}\n .value=${this.value}\n ?disabled=${this.disabled}\n @change=${this.handleChange}\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @pointerdown=${this.handlePointerDown}\n ${ripple(this.getRipple)}\n >\n `;\n }\n\n private handleBlur() {\n this.showFocusRing = false;\n }\n\n private handleFocus() {\n this.showFocusRing = shouldShowStrongFocus();\n }\n\n private handleChange(event: Event) {\n if (this.disabled) {\n return;\n }\n\n // Per spec, the change event on a radio input always represents checked.\n this.checked = true;\n redispatchEvent(this, event);\n }\n\n private handlePointerDown() {\n pointerPress();\n this.showFocusRing = shouldShowStrongFocus();\n }\n\n private readonly getRipple = () => {\n this.showRipple = true;\n return this.ripple;\n };\n\n private readonly renderRipple = () => {\n return html`<md-ripple unbounded ?disabled=${this.disabled}></md-ripple>`;\n };\n\n private renderFocusRing(): TemplateResult {\n return html`<md-focus-ring .visible=${this.showFocusRing}></md-focus-ring>`;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"radio.js","sourceRoot":"","sources":["radio.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAC,MAAM,IAAI,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAQjD;;;;;;;;;;;;;;;GAeG;AAEH,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,KAAK;CAEjC,CAAA;AADiB,cAAM,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAE,CAAA;AAD3C,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAEnB;SAFY,OAAO","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {customElement} from 'lit/decorators.js';\n\nimport {styles as forcedColorsStyles} from './lib/forced-colors-styles.css.js';\nimport {Radio} from './lib/radio.js';\nimport {styles} from './lib/radio-styles.css.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-radio': MdRadio;\n }\n}\n\n/**\n * @summary Radio buttons allow users to select one option from a set.\n *\n * @description\n * Radio buttons are the recommended way to allow users to make a single\n * selection from a list of options.\n *\n * Only one radio button can be selected at a time.\n *\n * Use radio buttons to:\n * - Select a single option from a set\n * - Expose all available options\n *\n * @final\n * @suppress {visibility}\n */\n@customElement('md-radio')\nexport class MdRadio extends Radio {\n static override styles = [styles, forcedColorsStyles];\n}\n"]}
1
+ {"version":3,"file":"radio.js","sourceRoot":"","sources":["radio.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAC,MAAM,IAAI,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAQjD;;;;;;;;;;;;;;;GAeG;AAEI,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,KAAK;;AAChB,cAAM,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;AAD3C,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAEnB;SAFY,OAAO","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {customElement} from 'lit/decorators.js';\n\nimport {styles as forcedColorsStyles} from './lib/forced-colors-styles.css.js';\nimport {Radio} from './lib/radio.js';\nimport {styles} from './lib/radio-styles.css.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-radio': MdRadio;\n }\n}\n\n/**\n * @summary Radio buttons allow users to select one option from a set.\n *\n * @description\n * Radio buttons are the recommended way to allow users to make a single\n * selection from a list of options.\n *\n * Only one radio button can be selected at a time.\n *\n * Use radio buttons to:\n * - Select a single option from a set\n * - Expose all available options\n *\n * @final\n * @suppress {visibility}\n */\n@customElement('md-radio')\nexport class MdRadio extends Radio {\n static override styles = [styles, forcedColorsStyles];\n}\n"]}
@@ -10,46 +10,14 @@ import { Ripple } from './lib/ripple.js';
10
10
  *
11
11
  * Use with `await rippleFunction()`
12
12
  */
13
- declare type RippleFunction = () => Ripple | null | Promise<Ripple | null>;
13
+ type RippleFunction = () => Ripple | null | Promise<Ripple | null>;
14
14
  declare class RippleDirective extends Directive {
15
15
  private rippleGetter;
16
16
  private element?;
17
- private state;
18
- private checkBoundsAfterContextMenu;
19
- private rippleStartEvent;
20
- private touchTimer;
21
- private clickTimer;
22
17
  constructor(partInfo: PartInfo);
23
18
  render(ripple: RippleFunction | Promise<Ripple | null>): symbol;
24
19
  handleEvent(event: Event): Promise<void>;
25
20
  update(part: ElementPart, [ripple]: DirectiveParameters<this>): symbol;
26
- /**
27
- * Returns `true` if
28
- * - the ripple element is enabled
29
- * - the pointer is primary for the input type
30
- * - the pointer is the pointer that started the interaction, or will start
31
- * the interaction
32
- * - the pointer is a touch, or the pointer state has the primary button
33
- * held, or the pointer is hovering
34
- */
35
- private shouldReactToEvent;
36
- private isTouch;
37
- /**
38
- * Check if the event is within the bounds of the element.
39
- *
40
- * This is only needed for the "stuck" contextmenu longpress on Chrome.
41
- */
42
- private inBounds;
43
- private beginPress;
44
- private endPress;
45
- private waitForTouchHold;
46
- private click;
47
- private contextMenu;
48
- private pointerDown;
49
- private pointerUp;
50
- private pointerCancel;
51
- private pointerEnter;
52
- private pointerLeave;
53
21
  }
54
22
  /**
55
23
  * Connects a Ripple element to a node that drives the interaction
@@ -5,65 +5,10 @@
5
5
  */
6
6
  import { noChange } from 'lit';
7
7
  import { Directive, directive, PartType } from 'lit/directive.js';
8
- /**
9
- * Delay reacting to touch so that we do not show the ripple for a swipe or
10
- * scroll interaction.
11
- */
12
- const TOUCH_DELAY_MS = 150;
13
- /**
14
- * Interaction states for the ripple.
15
- *
16
- * On Touch:
17
- * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`
18
- * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`
19
- *
20
- * On Mouse or Pen:
21
- * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`
22
- */
23
- var State;
24
- (function (State) {
25
- /**
26
- * Initial state of the control, no touch in progress.
27
- *
28
- * Transitions:
29
- * - on touch down: transition to `TOUCH_DELAY`.
30
- * - on mouse down: transition to `WAITING_FOR_CLICK`.
31
- */
32
- State[State["INACTIVE"] = 0] = "INACTIVE";
33
- /**
34
- * Touch down has been received, waiting to determine if it's a swipe or
35
- * scroll.
36
- *
37
- * Transitions:
38
- * - on touch up: beginPress(); transition to `WAITING_FOR_CLICK`.
39
- * - on cancel: transition to `INACTIVE`.
40
- * - after `TOUCH_DELAY_MS`: beginPress(); transition to `HOLDING`.
41
- */
42
- State[State["TOUCH_DELAY"] = 1] = "TOUCH_DELAY";
43
- /**
44
- * A touch has been deemed to be a press
45
- *
46
- * Transitions:
47
- * - on up: transition to `WAITING_FOR_CLICK`.
48
- */
49
- State[State["HOLDING"] = 2] = "HOLDING";
50
- /**
51
- * The user touch has finished, transition into rest state.
52
- *
53
- * Transitions:
54
- * - on click endPress(); transition to `INACTIVE`.
55
- */
56
- State[State["WAITING_FOR_CLICK"] = 3] = "WAITING_FOR_CLICK";
57
- })(State || (State = {}));
58
8
  class RippleDirective extends Directive {
59
9
  constructor(partInfo) {
60
10
  super(partInfo);
61
11
  this.rippleGetter = async () => null;
62
- this.state = State.INACTIVE;
63
- this.checkBoundsAfterContextMenu = false;
64
- this.rippleStartEvent = null;
65
- this.touchTimer = null;
66
- this.clickTimer = null;
67
12
  if (partInfo.type !== PartType.ELEMENT) {
68
13
  throw new Error('The `ripple` directive must be used on an element');
69
14
  }
@@ -80,25 +25,25 @@ class RippleDirective extends Directive {
80
25
  }
81
26
  switch (event.type) {
82
27
  case 'click':
83
- this.click(ripple);
28
+ ripple.handleClick();
84
29
  break;
85
30
  case 'contextmenu':
86
- this.contextMenu(ripple);
31
+ ripple.handleContextmenu();
87
32
  break;
88
33
  case 'pointercancel':
89
- this.pointerCancel(ripple, event);
34
+ ripple.handlePointercancel(event);
90
35
  break;
91
36
  case 'pointerdown':
92
- this.pointerDown(ripple, event);
37
+ await ripple.handlePointerdown(event);
93
38
  break;
94
39
  case 'pointerenter':
95
- this.pointerEnter(ripple, event);
40
+ ripple.handlePointerenter(event);
96
41
  break;
97
42
  case 'pointerleave':
98
- this.pointerLeave(ripple, event);
43
+ ripple.handlePointerleave(event);
99
44
  break;
100
45
  case 'pointerup':
101
- this.pointerUp(ripple, event);
46
+ ripple.handlePointerup(event);
102
47
  break;
103
48
  default:
104
49
  break;
@@ -121,138 +66,6 @@ class RippleDirective extends Directive {
121
66
  this.rippleGetter = typeof ripple === 'function' ? ripple : () => ripple;
122
67
  return noChange;
123
68
  }
124
- /**
125
- * Returns `true` if
126
- * - the ripple element is enabled
127
- * - the pointer is primary for the input type
128
- * - the pointer is the pointer that started the interaction, or will start
129
- * the interaction
130
- * - the pointer is a touch, or the pointer state has the primary button
131
- * held, or the pointer is hovering
132
- */
133
- shouldReactToEvent(ripple, ev, hovering = false) {
134
- const enabled = !ripple.disabled;
135
- const isPrimaryPointer = ev.isPrimary;
136
- const isInteractionPointer = this.rippleStartEvent === null ||
137
- this.rippleStartEvent.pointerId === ev.pointerId;
138
- const isPrimaryButton = ev.buttons === 1;
139
- return enabled && isPrimaryPointer && isInteractionPointer &&
140
- (this.isTouch(ev) || isPrimaryButton || hovering);
141
- }
142
- isTouch({ pointerType }) {
143
- return pointerType === 'touch';
144
- }
145
- /**
146
- * Check if the event is within the bounds of the element.
147
- *
148
- * This is only needed for the "stuck" contextmenu longpress on Chrome.
149
- */
150
- inBounds({ x, y }) {
151
- const { top, left, bottom, right } = this.element.getBoundingClientRect();
152
- return x >= left && x <= right && y >= top && y <= bottom;
153
- }
154
- beginPress(ripple) {
155
- ripple.beginPress(this.rippleStartEvent);
156
- }
157
- endPress(ripple) {
158
- ripple.endPress();
159
- this.state = State.INACTIVE;
160
- this.rippleStartEvent = null;
161
- if (this.touchTimer) {
162
- clearTimeout(this.touchTimer);
163
- this.touchTimer = null;
164
- }
165
- if (this.clickTimer) {
166
- clearTimeout(this.clickTimer);
167
- this.clickTimer = null;
168
- }
169
- }
170
- waitForTouchHold() {
171
- if (this.touchTimer !== null) {
172
- clearTimeout(this.touchTimer);
173
- }
174
- this.state = State.TOUCH_DELAY;
175
- this.touchTimer = setTimeout(async () => {
176
- const ripple = await this.rippleGetter();
177
- if (ripple === null || this.state !== State.TOUCH_DELAY) {
178
- return;
179
- }
180
- this.state = State.HOLDING;
181
- this.beginPress(ripple);
182
- }, TOUCH_DELAY_MS);
183
- }
184
- click(ripple) {
185
- // Click is a MouseEvent in Firefox and Safari, so we cannot use
186
- // `shouldReactToEvent`
187
- if (ripple.disabled) {
188
- return;
189
- }
190
- if (this.state === State.WAITING_FOR_CLICK) {
191
- this.endPress(ripple);
192
- }
193
- else if (this.state === State.INACTIVE) {
194
- // keyboard synthesized click event
195
- this.beginPress(ripple);
196
- this.endPress(ripple);
197
- }
198
- }
199
- contextMenu(ripple) {
200
- if (!ripple.disabled) {
201
- this.checkBoundsAfterContextMenu = true;
202
- this.endPress(ripple);
203
- }
204
- }
205
- pointerDown(ripple, ev) {
206
- if (!this.shouldReactToEvent(ripple, ev)) {
207
- return;
208
- }
209
- this.rippleStartEvent = ev;
210
- if (this.isTouch(ev)) {
211
- // after a longpress contextmenu event, an extra `pointerdown` can be
212
- // dispatched to the pressed element. Check that the down is within
213
- // bounds of the element in this case.
214
- if (this.checkBoundsAfterContextMenu && !this.inBounds(ev)) {
215
- return;
216
- }
217
- this.checkBoundsAfterContextMenu = false;
218
- this.waitForTouchHold();
219
- }
220
- else {
221
- this.state = State.WAITING_FOR_CLICK;
222
- this.beginPress(ripple);
223
- }
224
- }
225
- pointerUp(ripple, ev) {
226
- if (!this.isTouch(ev) || !this.shouldReactToEvent(ripple, ev)) {
227
- return;
228
- }
229
- if (this.state === State.HOLDING) {
230
- this.state = State.WAITING_FOR_CLICK;
231
- }
232
- else if (this.state === State.TOUCH_DELAY) {
233
- this.state = State.WAITING_FOR_CLICK;
234
- this.beginPress(ripple);
235
- }
236
- }
237
- pointerCancel(ripple, ev) {
238
- if (this.shouldReactToEvent(ripple, ev)) {
239
- this.endPress(ripple);
240
- }
241
- }
242
- pointerEnter(ripple, ev) {
243
- if (this.shouldReactToEvent(ripple, ev, true)) {
244
- ripple.beginHover(ev);
245
- }
246
- }
247
- pointerLeave(ripple, ev) {
248
- if (this.shouldReactToEvent(ripple, ev, true)) {
249
- ripple.endHover();
250
- // release a held mouse or pen press that moves outside the element
251
- if (!this.isTouch(ev) && this.state !== State.INACTIVE) {
252
- this.endPress(ripple);
253
- }
254
- }
255
- }
256
69
  }
257
70
  /**
258
71
  * Connects a Ripple element to a node that drives the interaction
@@ -1 +1 @@
1
- {"version":3,"file":"directive.js","sourceRoot":"","sources":["directive.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {noChange} from 'lit';\nimport {Directive, directive, DirectiveParameters, ElementPart, PartInfo, PartType} from 'lit/directive.js';\n\nimport {Ripple} from './lib/ripple.js';\n\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nenum State {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n INACTIVE,\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: beginPress(); transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: beginPress(); transition to `HOLDING`.\n */\n TOUCH_DELAY,\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n HOLDING,\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click endPress(); transition to `INACTIVE`.\n */\n WAITING_FOR_CLICK\n}\n\n/**\n * Normalized ripple accessor type.\n *\n * Use with `await rippleFunction()`\n */\ntype RippleFunction = () => Ripple|null|Promise<Ripple|null>;\n\nclass RippleDirective extends Directive {\n private rippleGetter: RippleFunction = async () => null;\n private element?: HTMLElement;\n private state: State = State.INACTIVE;\n private checkBoundsAfterContextMenu = false;\n private rippleStartEvent: PointerEvent|null = null;\n private touchTimer: number|null = null;\n private clickTimer: number|null = null;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('The `ripple` directive must be used on an element');\n }\n }\n\n render(ripple: RippleFunction|Promise<Ripple|null>) {\n return noChange;\n }\n\n // Use EventListenerObject::handleEvent interface to handle events without\n // generating bound event handlers\n async handleEvent(event: Event) {\n const ripple = await this.rippleGetter();\n if (!ripple) {\n return;\n }\n switch (event.type) {\n case 'click':\n this.click(ripple);\n break;\n case 'contextmenu':\n this.contextMenu(ripple);\n break;\n case 'pointercancel':\n this.pointerCancel(ripple, event as PointerEvent);\n break;\n case 'pointerdown':\n this.pointerDown(ripple, event as PointerEvent);\n break;\n case 'pointerenter':\n this.pointerEnter(ripple, event as PointerEvent);\n break;\n case 'pointerleave':\n this.pointerLeave(ripple, event as PointerEvent);\n break;\n case 'pointerup':\n this.pointerUp(ripple, event as PointerEvent);\n break;\n default:\n break;\n }\n }\n\n override update(part: ElementPart, [ripple]: DirectiveParameters<this>) {\n if (!this.element) {\n // NOTE: addEventListener typing needs to be used with HTMLElements or a\n // subclass\n this.element = part.element as HTMLElement;\n this.element.addEventListener('click', this);\n this.element.addEventListener('contextmenu', this);\n this.element.addEventListener('pointercancel', this);\n this.element.addEventListener('pointerdown', this);\n this.element.addEventListener('pointerenter', this);\n this.element.addEventListener('pointerleave', this);\n this.element.addEventListener('pointerup', this);\n }\n // Normalize given ripple accessor\n this.rippleGetter = typeof ripple === 'function' ? ripple : () => ripple;\n return noChange;\n }\n\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n private shouldReactToEvent(\n ripple: Ripple, ev: PointerEvent, hovering = false) {\n const enabled = !ripple.disabled;\n const isPrimaryPointer = ev.isPrimary;\n const isInteractionPointer = this.rippleStartEvent === null ||\n this.rippleStartEvent.pointerId === ev.pointerId;\n const isPrimaryButton = ev.buttons === 1;\n return enabled && isPrimaryPointer && isInteractionPointer &&\n (this.isTouch(ev) || isPrimaryButton || hovering);\n }\n\n private isTouch({pointerType}: PointerEvent) {\n return pointerType === 'touch';\n }\n\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n private inBounds({x, y}: PointerEvent) {\n const {top, left, bottom, right} = this.element!.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n private beginPress(ripple: Ripple) {\n ripple.beginPress(this.rippleStartEvent);\n }\n\n private endPress(ripple: Ripple) {\n ripple.endPress();\n this.state = State.INACTIVE;\n this.rippleStartEvent = null;\n if (this.touchTimer) {\n clearTimeout(this.touchTimer);\n this.touchTimer = null;\n }\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n this.clickTimer = null;\n }\n }\n\n private waitForTouchHold() {\n if (this.touchTimer !== null) {\n clearTimeout(this.touchTimer);\n }\n this.state = State.TOUCH_DELAY;\n this.touchTimer = setTimeout(async () => {\n const ripple = await this.rippleGetter();\n if (ripple === null || this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.beginPress(ripple);\n }, TOUCH_DELAY_MS);\n }\n\n private click(ripple: Ripple) {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (ripple.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPress(ripple);\n } else if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.beginPress(ripple);\n this.endPress(ripple);\n }\n }\n\n private contextMenu(ripple: Ripple) {\n if (!ripple.disabled) {\n this.checkBoundsAfterContextMenu = true;\n this.endPress(ripple);\n }\n }\n\n private pointerDown(ripple: Ripple, ev: PointerEvent) {\n if (!this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n this.rippleStartEvent = ev;\n if (this.isTouch(ev)) {\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(ev)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n this.waitForTouchHold();\n } else {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerUp(ripple: Ripple, ev: PointerEvent) {\n if (!this.isTouch(ev) || !this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n } else if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerCancel(ripple: Ripple, ev: PointerEvent) {\n if (this.shouldReactToEvent(ripple, ev)) {\n this.endPress(ripple);\n }\n }\n\n private pointerEnter(ripple: Ripple, ev: PointerEvent) {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.beginHover(ev);\n }\n }\n\n private pointerLeave(ripple: Ripple, ev: PointerEvent) {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.endHover();\n // release a held mouse or pen press that moves outside the element\n if (!this.isTouch(ev) && this.state !== State.INACTIVE) {\n this.endPress(ripple);\n }\n }\n }\n}\n\n/**\n * Connects a Ripple element to a node that drives the interaction\n *\n * @param rippleGetter A function that returns an `md-ripple` element\n * @param simulateKeyboardClick For elements that do not issue a click on\n * keyboard interaction, pass `true` to enable press animations on Enter or\n * Spacebar\n */\nexport const ripple = directive(RippleDirective);"]}
1
+ {"version":3,"file":"directive.js","sourceRoot":"","sources":["directive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAC,SAAS,EAAE,SAAS,EAA8C,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAW5G,MAAM,eAAgB,SAAQ,SAAS;IAIrC,YAAY,QAAkB;QAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAJV,iBAAY,GAAmB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC;QAKtD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;SACtE;IACH,CAAC;IAED,MAAM,CAAC,MAA2C;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,kCAAkC;IAClC,KAAK,CAAC,WAAW,CAAC,KAAY;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,OAAO;gBACV,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,MAAM;YACR,KAAK,eAAe;gBAClB,MAAM,CAAC,mBAAmB,CAAC,KAAqB,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAqB,CAAC,CAAC;gBACtD,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,kBAAkB,CAAC,KAAqB,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,kBAAkB,CAAC,KAAqB,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,CAAC,eAAe,CAAC,KAAqB,CAAC,CAAC;gBAC9C,MAAM;YACR;gBACE,MAAM;SACT;IACH,CAAC;IAEQ,MAAM,CAAC,IAAiB,EAAE,CAAC,MAAM,CAA4B;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,wEAAwE;YACxE,WAAW;YACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAsB,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;SAClD;QACD,kCAAkC;QAClC,IAAI,CAAC,YAAY,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QACzE,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {noChange} from 'lit';\nimport {Directive, directive, DirectiveParameters, ElementPart, PartInfo, PartType} from 'lit/directive.js';\n\nimport {Ripple} from './lib/ripple.js';\n\n/**\n * Normalized ripple accessor type.\n *\n * Use with `await rippleFunction()`\n */\ntype RippleFunction = () => Ripple|null|Promise<Ripple|null>;\n\nclass RippleDirective extends Directive {\n private rippleGetter: RippleFunction = async () => null;\n private element?: HTMLElement;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('The `ripple` directive must be used on an element');\n }\n }\n\n render(ripple: RippleFunction|Promise<Ripple|null>) {\n return noChange;\n }\n\n // Use EventListenerObject::handleEvent interface to handle events without\n // generating bound event handlers\n async handleEvent(event: Event) {\n const ripple = await this.rippleGetter();\n if (!ripple) {\n return;\n }\n switch (event.type) {\n case 'click':\n ripple.handleClick();\n break;\n case 'contextmenu':\n ripple.handleContextmenu();\n break;\n case 'pointercancel':\n ripple.handlePointercancel(event as PointerEvent);\n break;\n case 'pointerdown':\n await ripple.handlePointerdown(event as PointerEvent);\n break;\n case 'pointerenter':\n ripple.handlePointerenter(event as PointerEvent);\n break;\n case 'pointerleave':\n ripple.handlePointerleave(event as PointerEvent);\n break;\n case 'pointerup':\n ripple.handlePointerup(event as PointerEvent);\n break;\n default:\n break;\n }\n }\n\n override update(part: ElementPart, [ripple]: DirectiveParameters<this>) {\n if (!this.element) {\n // NOTE: addEventListener typing needs to be used with HTMLElements or a\n // subclass\n this.element = part.element as HTMLElement;\n this.element.addEventListener('click', this);\n this.element.addEventListener('contextmenu', this);\n this.element.addEventListener('pointercancel', this);\n this.element.addEventListener('pointerdown', this);\n this.element.addEventListener('pointerenter', this);\n this.element.addEventListener('pointerleave', this);\n this.element.addEventListener('pointerup', this);\n }\n // Normalize given ripple accessor\n this.rippleGetter = typeof ripple === 'function' ? ripple : () => ripple;\n return noChange;\n }\n}\n\n/**\n * Connects a Ripple element to a node that drives the interaction\n *\n * @param rippleGetter A function that returns an `md-ripple` element\n * @param simulateKeyboardClick For elements that do not issue a click on\n * keyboard interaction, pass `true` to enable press animations on Enter or\n * Spacebar\n */\nexport const ripple = directive(RippleDirective);\n"]}
@@ -3,27 +3,28 @@
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  //
5
5
 
6
+ // go/keep-sorted start
6
7
  @use 'sass:map';
8
+ // go/keep-sorted end
9
+ // go/keep-sorted start
7
10
  @use '../../tokens';
11
+ // go/keep-sorted end
8
12
 
9
- @function values($exclude-hardcoded-values: false) {
10
- $state-values: tokens.md-sys-state-values($exclude-hardcoded-values);
11
- $default-shape: map.get(
12
- tokens.md-sys-shape-values($exclude-hardcoded-values),
13
- corner-none
14
- );
15
- $default-color: if($exclude-hardcoded-values, null, black);
16
- // add missing tokens
17
- $values: map.merge(
18
- $state-values,
19
- (
20
- state-layer-shape: $default-shape,
21
- focus-state-layer-color: $default-color,
22
- hover-state-layer-color: $default-color,
23
- pressed-state-layer-color: $default-color,
24
- dragged-state-layer-color: $default-color,
25
- )
26
- );
13
+ $_default-deps: (
14
+ md-sys-color: tokens.md-sys-color-values-light(),
15
+ md-sys-shape: tokens.md-sys-shape-values(),
16
+ md-sys-state: tokens.md-sys-state-values(),
17
+ );
27
18
 
28
- @return $values;
19
+ @function values($deps: $_default-deps) {
20
+ @return (
21
+ 'focus-color': map.get($deps, 'md-sys-color', 'on-surface'),
22
+ 'focus-opacity': map.get($deps, 'md-sys-state', 'focus-state-layer-opacity'),
23
+ 'hover-color': map.get($deps, 'md-sys-color', 'on-surface'),
24
+ 'hover-opacity': map.get($deps, 'md-sys-state', 'hover-state-layer-opacity'),
25
+ 'pressed-color': map.get($deps, 'md-sys-color', 'on-surface'),
26
+ 'pressed-opacity':
27
+ map.get($deps, 'md-sys-state', 'pressed-state-layer-opacity'),
28
+ 'shape': map.get($deps, 'md-sys-shape', 'corner-none')
29
+ );
29
30
  }
@@ -3,13 +3,14 @@
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  //
5
5
 
6
- // stylelint-disable selector-class-pattern --
7
- // Selector '.md3-*' should only be used in this project.
8
-
6
+ // go/keep-sorted start
9
7
  @use 'sass:map';
8
+ // go/keep-sorted end
9
+ // go/keep-sorted start
10
10
  @use '../../sass/theme';
11
11
  @use '../../tokens';
12
12
  @use './md-comp-ripple';
13
+ // go/keep-sorted end
13
14
 
14
15
  @mixin theme($tokens) {
15
16
  $tokens: theme.validate-theme(md-comp-ripple.values(), $tokens);
@@ -37,19 +38,19 @@
37
38
  }
38
39
 
39
40
  :host,
40
- .md3-ripple-surface {
41
+ .surface {
41
42
  position: absolute;
42
43
  inset: 0;
43
44
  pointer-events: none;
44
45
  overflow: hidden;
45
46
  }
46
47
 
47
- .md3-ripple-surface {
48
+ .surface {
48
49
  // TODO(https://bugs.webkit.org/show_bug.cgi?id=247546)
49
50
  // Remove Safari workaround for incorrect ripple overflow when addressed.
50
51
  // This addresses `hover` and `pressed` state oveflow.
51
52
  will-change: transform;
52
- border-radius: var(--_state-layer-shape);
53
+ border-radius: var(--_shape);
53
54
  outline: none;
54
55
  -webkit-tap-highlight-color: transparent;
55
56
 
@@ -62,7 +63,7 @@
62
63
  }
63
64
 
64
65
  &::before {
65
- background-color: var(--_hover-state-layer-color);
66
+ background-color: var(--_hover-color);
66
67
  transition: opacity 15ms linear, background-color 15ms linear;
67
68
  inset: 0;
68
69
  }
@@ -71,7 +72,7 @@
71
72
  // press ripple fade-out
72
73
  background: radial-gradient(
73
74
  closest-side,
74
- var(--_pressed-state-layer-color) max(calc(100% - 70px), 65%),
75
+ var(--_pressed-color) max(calc(100% - 70px), 65%),
75
76
  transparent 100%
76
77
  );
77
78
  transition: opacity 375ms linear;
@@ -79,33 +80,32 @@
79
80
  }
80
81
  }
81
82
 
82
- .md3-ripple--hovered::before {
83
- background-color: var(--_hover-state-layer-color);
84
- opacity: var(--_hover-state-layer-opacity);
83
+ .hovered::before {
84
+ background-color: var(--_hover-color);
85
+ opacity: var(--_hover-opacity);
85
86
  }
86
87
 
87
- .md3-ripple--focused::before {
88
- background-color: var(--_focus-state-layer-color);
89
- opacity: var(--_focus-state-layer-opacity);
88
+ .focused::before {
89
+ background-color: var(--_focus-color);
90
+ opacity: var(--_focus-opacity);
90
91
  transition-duration: 75ms;
91
92
  }
92
93
 
93
- .md3-ripple--pressed::after {
94
+ .pressed::after {
94
95
  // press ripple fade-in
95
- opacity: var(--_pressed-state-layer-opacity);
96
+ opacity: var(--_pressed-opacity);
96
97
  transition-duration: 105ms;
97
98
  }
98
99
 
99
- .md3-ripple--unbounded {
100
+ .unbounded {
100
101
  $unbounded: (
101
- state-layer-shape: map.get(tokens.md-sys-shape-values(), 'corner-full'),
102
+ shape: map.get(tokens.md-sys-shape-values(), 'corner-full'),
102
103
  );
103
104
  $unbounded: theme.create-theme-vars($unbounded, ripple);
104
105
 
105
- --_state-layer-shape: #{map.get($unbounded, 'state-layer-shape')};
106
+ --_shape: #{map.get($unbounded, 'shape')};
106
107
  }
107
108
 
108
- // TODO(b/230630968): create a forced-colors-mode mixin
109
109
  @media screen and (forced-colors: active) {
110
110
  :host {
111
111
  display: none;
@@ -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{--_dragged-state-layer-opacity: var(--md-ripple-dragged-state-layer-opacity, 0.16);--_focus-state-layer-opacity: var(--md-ripple-focus-state-layer-opacity, 0.12);--_hover-state-layer-opacity: var(--md-ripple-hover-state-layer-opacity, 0.08);--_pressed-state-layer-opacity: var(--md-ripple-pressed-state-layer-opacity, 0.12);--_state-layer-shape: var(--md-ripple-state-layer-shape, 0px);--_focus-state-layer-color: var(--md-ripple-focus-state-layer-color, black);--_hover-state-layer-color: var(--md-ripple-hover-state-layer-color, black);--_pressed-state-layer-color: var(--md-ripple-pressed-state-layer-color, black);--_dragged-state-layer-color: var(--md-ripple-dragged-state-layer-color, black)}:host{display:flex}:host([disabled]){opacity:0}:host,.md3-ripple-surface{position:absolute;inset:0;pointer-events:none;overflow:hidden}.md3-ripple-surface{will-change:transform;border-radius:var(--_state-layer-shape);outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.md3-ripple-surface::before,.md3-ripple-surface::after{position:absolute;opacity:0;pointer-events:none;content:""}.md3-ripple-surface::before{background-color:var(--_hover-state-layer-color);transition:opacity 15ms linear,background-color 15ms linear;inset:0}.md3-ripple-surface::after{background:radial-gradient(closest-side, var(--_pressed-state-layer-color) max(100% - 70px, 65%), transparent 100%);transition:opacity 375ms linear;transform-origin:center center}.md3-ripple--hovered::before{background-color:var(--_hover-state-layer-color);opacity:var(--_hover-state-layer-opacity)}.md3-ripple--focused::before{background-color:var(--_focus-state-layer-color);opacity:var(--_focus-state-layer-opacity);transition-duration:75ms}.md3-ripple--pressed::after{opacity:var(--_pressed-state-layer-opacity);transition-duration:105ms}.md3-ripple--unbounded{--_state-layer-shape: var(--md-ripple-state-layer-shape, 9999px)}@media screen and (forced-colors: active){:host{display:none}}/*# sourceMappingURL=ripple-styles.css.map */
7
+ export const styles = css `:host{--_focus-color: var(--md-ripple-focus-color, var(--md-sys-color-on-surface, #1c1b1f));--_focus-opacity: var(--md-ripple-focus-opacity, 0.12);--_hover-color: var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1c1b1f));--_hover-opacity: var(--md-ripple-hover-opacity, 0.08);--_pressed-color: var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1c1b1f));--_pressed-opacity: var(--md-ripple-pressed-opacity, 0.12);--_shape: var(--md-ripple-shape, 0px)}:host{display:flex}:host([disabled]){opacity:0}:host,.surface{position:absolute;inset:0;pointer-events:none;overflow:hidden}.surface{will-change:transform;border-radius:var(--_shape);outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{position:absolute;opacity:0;pointer-events:none;content:""}.surface::before{background-color:var(--_hover-color);transition:opacity 15ms linear,background-color 15ms linear;inset:0}.surface::after{background:radial-gradient(closest-side, var(--_pressed-color) max(100% - 70px, 65%), transparent 100%);transition:opacity 375ms linear;transform-origin:center center}.hovered::before{background-color:var(--_hover-color);opacity:var(--_hover-opacity)}.focused::before{background-color:var(--_focus-color);opacity:var(--_focus-opacity);transition-duration:75ms}.pressed::after{opacity:var(--_pressed-opacity);transition-duration:105ms}.unbounded{--_shape: var(--md-ripple-shape, 9999px)}@media screen and (forced-colors: active){:host{display:none}}/*# sourceMappingURL=ripple-styles.css.map */
8
8
  `;
9
9
  //# sourceMappingURL=ripple-styles.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple-styles.css.js","sourceRoot":"","sources":["ripple-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{--_dragged-state-layer-opacity: var(--md-ripple-dragged-state-layer-opacity, 0.16);--_focus-state-layer-opacity: var(--md-ripple-focus-state-layer-opacity, 0.12);--_hover-state-layer-opacity: var(--md-ripple-hover-state-layer-opacity, 0.08);--_pressed-state-layer-opacity: var(--md-ripple-pressed-state-layer-opacity, 0.12);--_state-layer-shape: var(--md-ripple-state-layer-shape, 0px);--_focus-state-layer-color: var(--md-ripple-focus-state-layer-color, black);--_hover-state-layer-color: var(--md-ripple-hover-state-layer-color, black);--_pressed-state-layer-color: var(--md-ripple-pressed-state-layer-color, black);--_dragged-state-layer-color: var(--md-ripple-dragged-state-layer-color, black)}:host{display:flex}:host([disabled]){opacity:0}:host,.md3-ripple-surface{position:absolute;inset:0;pointer-events:none;overflow:hidden}.md3-ripple-surface{will-change:transform;border-radius:var(--_state-layer-shape);outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.md3-ripple-surface::before,.md3-ripple-surface::after{position:absolute;opacity:0;pointer-events:none;content:\"\"}.md3-ripple-surface::before{background-color:var(--_hover-state-layer-color);transition:opacity 15ms linear,background-color 15ms linear;inset:0}.md3-ripple-surface::after{background:radial-gradient(closest-side, var(--_pressed-state-layer-color) max(100% - 70px, 65%), transparent 100%);transition:opacity 375ms linear;transform-origin:center center}.md3-ripple--hovered::before{background-color:var(--_hover-state-layer-color);opacity:var(--_hover-state-layer-opacity)}.md3-ripple--focused::before{background-color:var(--_focus-state-layer-color);opacity:var(--_focus-state-layer-opacity);transition-duration:75ms}.md3-ripple--pressed::after{opacity:var(--_pressed-state-layer-opacity);transition-duration:105ms}.md3-ripple--unbounded{--_state-layer-shape: var(--md-ripple-state-layer-shape, 9999px)}@media screen and (forced-colors: active){:host{display:none}}/*# sourceMappingURL=ripple-styles.css.map */\n`;\n "]}
1
+ {"version":3,"file":"ripple-styles.css.js","sourceRoot":"","sources":["ripple-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{--_focus-color: var(--md-ripple-focus-color, var(--md-sys-color-on-surface, #1c1b1f));--_focus-opacity: var(--md-ripple-focus-opacity, 0.12);--_hover-color: var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1c1b1f));--_hover-opacity: var(--md-ripple-hover-opacity, 0.08);--_pressed-color: var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1c1b1f));--_pressed-opacity: var(--md-ripple-pressed-opacity, 0.12);--_shape: var(--md-ripple-shape, 0px)}:host{display:flex}:host([disabled]){opacity:0}:host,.surface{position:absolute;inset:0;pointer-events:none;overflow:hidden}.surface{will-change:transform;border-radius:var(--_shape);outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{position:absolute;opacity:0;pointer-events:none;content:\"\"}.surface::before{background-color:var(--_hover-color);transition:opacity 15ms linear,background-color 15ms linear;inset:0}.surface::after{background:radial-gradient(closest-side, var(--_pressed-color) max(100% - 70px, 65%), transparent 100%);transition:opacity 375ms linear;transform-origin:center center}.hovered::before{background-color:var(--_hover-color);opacity:var(--_hover-opacity)}.focused::before{background-color:var(--_focus-color);opacity:var(--_focus-opacity);transition-duration:75ms}.pressed::after{opacity:var(--_pressed-opacity);transition-duration:105ms}.unbounded{--_shape: var(--md-ripple-shape, 9999px)}@media screen and (forced-colors: active){:host{display:none}}/*# sourceMappingURL=ripple-styles.css.map */\n`;\n "]}
@@ -3,6 +3,8 @@
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  //
5
5
 
6
+ // go/keep-sorted start
6
7
  @use './ripple';
8
+ // go/keep-sorted end
7
9
 
8
10
  @include ripple.styles;