@material/web 1.0.0-pre.1 → 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 (683) hide show
  1. package/README.md +66 -19
  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 +23 -62
  9. package/autocomplete/lib/_outlined-autocomplete.scss +24 -63
  10. package/autocomplete/lib/_shared.scss +6 -10
  11. package/autocomplete/lib/autocomplete.d.ts +2 -6
  12. package/autocomplete/lib/autocomplete.js +9 -17
  13. package/autocomplete/lib/autocomplete.js.map +1 -1
  14. package/autocomplete/lib/autocompleteitem/autocomplete-item.d.ts +2 -2
  15. package/autocomplete/lib/autocompleteitem/autocomplete-item.js +2 -2
  16. package/autocomplete/lib/autocompleteitem/autocomplete-item.js.map +1 -1
  17. package/autocomplete/lib/autocompletelist/autocomplete-list-styles.scss +2 -0
  18. package/autocomplete/lib/autocompletelist/autocomplete-list.d.ts +1 -1
  19. package/autocomplete/lib/autocompletelist/autocomplete-list.js +2 -2
  20. package/autocomplete/lib/autocompletelist/autocomplete-list.js.map +1 -1
  21. package/autocomplete/lib/autocompletesurface/autocomplete-surface-styles.scss +2 -0
  22. package/autocomplete/lib/filled-styles.css.js +1 -1
  23. package/autocomplete/lib/filled-styles.css.js.map +1 -1
  24. package/autocomplete/lib/filled-styles.scss +2 -0
  25. package/autocomplete/lib/outlined-styles.css.js +1 -1
  26. package/autocomplete/lib/outlined-styles.css.js.map +1 -1
  27. package/autocomplete/lib/outlined-styles.scss +2 -0
  28. package/autocomplete/lib/shared-styles.scss +2 -0
  29. package/autocomplete/outlined-autocomplete.d.ts +0 -2
  30. package/autocomplete/outlined-autocomplete.js +0 -7
  31. package/autocomplete/outlined-autocomplete.js.map +1 -1
  32. package/badge/badge.js.map +1 -1
  33. package/badge/lib/_badge.scss +10 -13
  34. package/badge/lib/badge-styles.css.js +1 -1
  35. package/badge/lib/badge-styles.css.js.map +1 -1
  36. package/badge/lib/badge-styles.scss +2 -0
  37. package/badge/lib/badge.js.map +1 -1
  38. package/button/elevated-button.js.map +1 -1
  39. package/button/elevated-link-button.js.map +1 -1
  40. package/button/filled-button.js.map +1 -1
  41. package/button/filled-link-button.js.map +1 -1
  42. package/button/lib/_elevated-button.scss +10 -15
  43. package/button/lib/_elevation.scss +5 -2
  44. package/button/lib/_filled-button.scss +12 -14
  45. package/button/lib/_icon.scss +15 -24
  46. package/button/lib/_outlined-button.scss +10 -15
  47. package/button/lib/_shared.scss +15 -19
  48. package/button/lib/_text-button.scss +12 -14
  49. package/button/lib/_tonal-button.scss +10 -15
  50. package/button/lib/button.d.ts +0 -3
  51. package/button/lib/button.js +1 -12
  52. package/button/lib/button.js.map +1 -1
  53. package/button/lib/elevated-styles.css.js +1 -1
  54. package/button/lib/elevated-styles.css.js.map +1 -1
  55. package/button/lib/elevated-styles.scss +2 -0
  56. package/button/lib/filled-styles.css.js +1 -1
  57. package/button/lib/filled-styles.css.js.map +1 -1
  58. package/button/lib/filled-styles.scss +2 -0
  59. package/button/lib/link-button.d.ts +0 -1
  60. package/button/lib/link-button.js +0 -5
  61. package/button/lib/link-button.js.map +1 -1
  62. package/button/lib/outlined-styles.css.js +1 -1
  63. package/button/lib/outlined-styles.css.js.map +1 -1
  64. package/button/lib/outlined-styles.scss +2 -0
  65. package/button/lib/shared-elevation-styles.css.js +1 -1
  66. package/button/lib/shared-elevation-styles.css.js.map +1 -1
  67. package/button/lib/shared-elevation-styles.scss +2 -0
  68. package/button/lib/shared-styles.css.js +1 -1
  69. package/button/lib/shared-styles.css.js.map +1 -1
  70. package/button/lib/shared-styles.scss +2 -0
  71. package/button/lib/text-styles.css.js +1 -1
  72. package/button/lib/text-styles.css.js.map +1 -1
  73. package/button/lib/text-styles.scss +2 -0
  74. package/button/lib/tonal-styles.css.js +1 -1
  75. package/button/lib/tonal-styles.css.js.map +1 -1
  76. package/button/lib/tonal-styles.scss +2 -0
  77. package/button/outlined-button.js.map +1 -1
  78. package/button/outlined-link-button.js.map +1 -1
  79. package/button/text-button.js.map +1 -1
  80. package/button/text-link-button.js.map +1 -1
  81. package/button/tonal-button.js.map +1 -1
  82. package/button/tonal-link-button.js.map +1 -1
  83. package/checkbox/checkbox.d.ts +11 -2
  84. package/checkbox/checkbox.js +11 -2
  85. package/checkbox/checkbox.js.map +1 -1
  86. package/checkbox/lib/_checkbox.scss +26 -31
  87. package/checkbox/lib/checkbox-styles.css.js +1 -1
  88. package/checkbox/lib/checkbox-styles.css.js.map +1 -1
  89. package/checkbox/lib/checkbox-styles.scss +2 -0
  90. package/checkbox/lib/checkbox.d.ts +28 -0
  91. package/checkbox/lib/checkbox.js +33 -4
  92. package/checkbox/lib/checkbox.js.map +1 -1
  93. package/checkbox/lib/forced-colors-styles.scss +2 -0
  94. package/chips/action/delete-action.js.map +1 -1
  95. package/chips/action/lib/action.js +4 -4
  96. package/chips/action/lib/action.js.map +1 -1
  97. package/chips/action/lib/link-action.js +1 -1
  98. package/chips/action/lib/link-action.js.map +1 -1
  99. package/chips/action/lib/primary-action.js.map +1 -1
  100. package/chips/action/lib/selectable-action.js.map +1 -1
  101. package/chips/action/link-action.js.map +1 -1
  102. package/chips/action/presentational-action.js.map +1 -1
  103. package/chips/action/primary-action.js.map +1 -1
  104. package/chips/action/selectable-action.js.map +1 -1
  105. package/chips/chip/lib/_assist-chip-theme.scss +4 -0
  106. package/chips/chip/lib/_chip-theme.scss +30 -41
  107. package/chips/chip/lib/_chip.scss +2 -0
  108. package/chips/chip/lib/_filter-chip-theme.scss +4 -0
  109. package/chips/chip/lib/_input-chip-theme.scss +4 -0
  110. package/chips/chip/lib/_suggestion-chip-theme.scss +4 -0
  111. package/chips/chip/lib/chip.js.map +1 -1
  112. package/chips/chip/lib/foundation.js +4 -4
  113. package/chips/chip/lib/foundation.js.map +1 -1
  114. package/chips/chip/lib/link-chip.js.map +1 -1
  115. package/chips/chip/lib/selectable-chip.js.map +1 -1
  116. package/chips/chip/lib/types.d.ts +2 -2
  117. package/chips/chipset/lib/_chip-set-theme.scss +2 -0
  118. package/chips/chipset/lib/_chip-set.scss +2 -0
  119. package/chips/chipset/lib/foundation.js +3 -3
  120. package/chips/chipset/lib/foundation.js.map +1 -1
  121. package/chips/chipset/lib/types.d.ts +3 -3
  122. package/controller/events.js +4 -0
  123. package/controller/events.js.map +1 -1
  124. package/controller/form-controller.js.map +1 -1
  125. package/controller/foundation.d.ts +1 -1
  126. package/controller/observer.d.ts +2 -2
  127. package/dialog/_dialog.scss +6 -0
  128. package/dialog/dialog.d.ts +38 -0
  129. package/dialog/dialog.js +41 -0
  130. package/dialog/dialog.js.map +1 -0
  131. package/dialog/harness.d.ts +18 -0
  132. package/dialog/harness.js +58 -0
  133. package/dialog/harness.js.map +1 -0
  134. package/dialog/lib/_dialog.scss +382 -0
  135. package/dialog/lib/_tokens.scss +89 -0
  136. package/dialog/lib/dialog-styles.css.js +9 -0
  137. package/dialog/lib/dialog-styles.css.js.map +1 -0
  138. package/dialog/lib/dialog-styles.scss +10 -0
  139. package/dialog/lib/dialog.d.ts +190 -0
  140. package/dialog/lib/dialog.js +568 -0
  141. package/dialog/lib/dialog.js.map +1 -0
  142. package/divider/_divider.scss +6 -0
  143. package/divider/divider.d.ts +24 -0
  144. package/divider/divider.js +27 -0
  145. package/divider/divider.js.map +1 -0
  146. package/divider/lib/_divider.scss +56 -0
  147. package/divider/lib/divider-styles.css.js +9 -0
  148. package/divider/lib/divider-styles.css.js.map +1 -0
  149. package/divider/lib/divider-styles.scss +10 -0
  150. package/divider/lib/divider.d.ts +23 -0
  151. package/divider/lib/divider.js +41 -0
  152. package/divider/lib/divider.js.map +1 -0
  153. package/elevation/elevation.js.map +1 -1
  154. package/elevation/lib/_elevation.scss +5 -1
  155. package/elevation/lib/_md-comp-elevation.scss +5 -1
  156. package/elevation/lib/elevation-styles.css.js +1 -1
  157. package/elevation/lib/elevation-styles.css.js.map +1 -1
  158. package/elevation/lib/elevation-styles.scss +2 -0
  159. package/elevation/lib/elevation.js.map +1 -1
  160. package/fab/fab-extended.js.map +1 -1
  161. package/fab/fab.js.map +1 -1
  162. package/fab/lib/_fab-extended.scss +18 -11
  163. package/fab/lib/_fab.scss +7 -2
  164. package/fab/lib/_shared.scss +17 -9
  165. package/fab/lib/fab-extended-styles.css.js +1 -1
  166. package/fab/lib/fab-extended-styles.css.js.map +1 -1
  167. package/fab/lib/fab-extended-styles.scss +2 -0
  168. package/fab/lib/fab-shared-styles.css.js +1 -1
  169. package/fab/lib/fab-shared-styles.css.js.map +1 -1
  170. package/fab/lib/fab-shared-styles.scss +2 -0
  171. package/fab/lib/fab-shared.d.ts +9 -15
  172. package/fab/lib/fab-shared.js +21 -33
  173. package/fab/lib/fab-shared.js.map +1 -1
  174. package/fab/lib/fab-styles.css.js +1 -1
  175. package/fab/lib/fab-styles.css.js.map +1 -1
  176. package/fab/lib/fab-styles.scss +2 -0
  177. package/field/filled-field.d.ts +1 -1
  178. package/field/filled-field.js +1 -1
  179. package/field/filled-field.js.map +1 -1
  180. package/field/harness.js +1 -1
  181. package/field/harness.js.map +1 -1
  182. package/field/lib/_content.scss +35 -50
  183. package/field/lib/_filled-field.scss +60 -76
  184. package/field/lib/_label.scss +26 -63
  185. package/field/lib/_md-comp-filled-field.scss +17 -3
  186. package/field/lib/_md-comp-outlined-field.scss +16 -5
  187. package/field/lib/_outlined-field.scss +96 -110
  188. package/field/lib/_shared.scss +15 -35
  189. package/field/lib/_supporting-text.scss +25 -52
  190. package/field/lib/field.d.ts +14 -33
  191. package/field/lib/field.js +79 -101
  192. package/field/lib/field.js.map +1 -1
  193. package/field/lib/filled-field.d.ts +10 -16
  194. package/field/lib/filled-field.js +14 -37
  195. package/field/lib/filled-field.js.map +1 -1
  196. package/field/lib/filled-styles.css.js +1 -1
  197. package/field/lib/filled-styles.css.js.map +1 -1
  198. package/field/lib/outlined-field.d.ts +4 -10
  199. package/field/lib/outlined-field.js +13 -33
  200. package/field/lib/outlined-field.js.map +1 -1
  201. package/field/lib/outlined-styles.css.js +1 -1
  202. package/field/lib/outlined-styles.css.js.map +1 -1
  203. package/field/lib/shared-styles.css.js +1 -1
  204. package/field/lib/shared-styles.css.js.map +1 -1
  205. package/field/outlined-field.d.ts +1 -1
  206. package/field/outlined-field.js +1 -1
  207. package/field/outlined-field.js.map +1 -1
  208. package/focus/focus-ring.js.map +1 -1
  209. package/focus/lib/_focus-ring.scss +10 -23
  210. package/focus/lib/_md-comp-focus-ring.scss +4 -0
  211. package/focus/lib/focus-ring-styles.css.js +1 -1
  212. package/focus/lib/focus-ring-styles.css.js.map +1 -1
  213. package/focus/lib/focus-ring-styles.scss +2 -0
  214. package/focus/lib/focus-ring.d.ts +1 -4
  215. package/focus/lib/focus-ring.js +2 -11
  216. package/focus/lib/focus-ring.js.map +1 -1
  217. package/icon/icon.js.map +1 -1
  218. package/icon/lib/_icon.scss +2 -0
  219. package/icon/lib/icon-styles.scss +2 -0
  220. package/iconbutton/filled-icon-button-toggle.js.map +1 -1
  221. package/iconbutton/filled-icon-button.js.map +1 -1
  222. package/iconbutton/filled-link-icon-button.js.map +1 -1
  223. package/iconbutton/filled-tonal-icon-button-toggle.js.map +1 -1
  224. package/iconbutton/filled-tonal-icon-button.js.map +1 -1
  225. package/iconbutton/filled-tonal-link-icon-button.js.map +1 -1
  226. package/iconbutton/lib/_filled-icon-button.scss +20 -20
  227. package/iconbutton/lib/_filled-tonal-icon-button.scss +20 -20
  228. package/iconbutton/lib/_outlined-icon-button.scss +27 -21
  229. package/iconbutton/lib/_shared.scss +13 -33
  230. package/iconbutton/lib/_standard-icon-button.scss +25 -24
  231. package/iconbutton/lib/filled-styles.css.js +1 -1
  232. package/iconbutton/lib/filled-styles.css.js.map +1 -1
  233. package/iconbutton/lib/filled-styles.scss +2 -0
  234. package/iconbutton/lib/filled-tonal-styles.css.js +1 -1
  235. package/iconbutton/lib/filled-tonal-styles.css.js.map +1 -1
  236. package/iconbutton/lib/filled-tonal-styles.scss +2 -0
  237. package/iconbutton/lib/icon-button-toggle.d.ts +13 -42
  238. package/iconbutton/lib/icon-button-toggle.js +33 -103
  239. package/iconbutton/lib/icon-button-toggle.js.map +1 -1
  240. package/iconbutton/lib/icon-button.d.ts +2 -4
  241. package/iconbutton/lib/icon-button.js +3 -9
  242. package/iconbutton/lib/icon-button.js.map +1 -1
  243. package/iconbutton/lib/link-icon-button.js.map +1 -1
  244. package/iconbutton/lib/outlined-styles.css.js +1 -1
  245. package/iconbutton/lib/outlined-styles.css.js.map +1 -1
  246. package/iconbutton/lib/outlined-styles.scss +2 -0
  247. package/iconbutton/lib/shared-styles.css.js +1 -1
  248. package/iconbutton/lib/shared-styles.css.js.map +1 -1
  249. package/iconbutton/lib/shared-styles.scss +2 -0
  250. package/iconbutton/lib/standard-styles.css.js +1 -1
  251. package/iconbutton/lib/standard-styles.css.js.map +1 -1
  252. package/iconbutton/lib/standard-styles.scss +2 -0
  253. package/iconbutton/outlined-icon-button-toggle.js.map +1 -1
  254. package/iconbutton/outlined-icon-button.js.map +1 -1
  255. package/iconbutton/outlined-link-icon-button.js.map +1 -1
  256. package/iconbutton/standard-icon-button-toggle.js.map +1 -1
  257. package/iconbutton/standard-icon-button.js.map +1 -1
  258. package/iconbutton/standard-link-icon-button.js.map +1 -1
  259. package/list/lib/_list.scss +35 -39
  260. package/list/lib/avatar/_list-item-avatar.scss +3 -1
  261. package/list/lib/avatar/list-item-avatar-styles.css.js +1 -1
  262. package/list/lib/avatar/list-item-avatar-styles.css.js.map +1 -1
  263. package/list/lib/avatar/list-item-avatar-styles.scss +2 -0
  264. package/list/lib/avatar/list-item-avatar.d.ts +9 -4
  265. package/list/lib/avatar/list-item-avatar.js +24 -11
  266. package/list/lib/avatar/list-item-avatar.js.map +1 -1
  267. package/list/lib/icon/_list-item-icon.scss +7 -1
  268. package/list/lib/icon/list-item-icon-styles.css.js +1 -1
  269. package/list/lib/icon/list-item-icon-styles.css.js.map +1 -1
  270. package/list/lib/icon/list-item-icon-styles.scss +2 -0
  271. package/list/lib/icon/list-item-icon.d.ts +0 -3
  272. package/list/lib/icon/list-item-icon.js +1 -12
  273. package/list/lib/icon/list-item-icon.js.map +1 -1
  274. package/list/lib/image/_list-item-image.scss +6 -2
  275. package/list/lib/image/list-item-image-styles.css.js +1 -1
  276. package/list/lib/image/list-item-image-styles.css.js.map +1 -1
  277. package/list/lib/image/list-item-image-styles.scss +2 -0
  278. package/list/lib/image/list-item-image.d.ts +11 -4
  279. package/list/lib/image/list-item-image.js +24 -13
  280. package/list/lib/image/list-item-image.js.map +1 -1
  281. package/list/lib/list-styles.css.js +1 -1
  282. package/list/lib/list-styles.css.js.map +1 -1
  283. package/list/lib/list-styles.scss +2 -0
  284. package/list/lib/list.d.ts +99 -28
  285. package/list/lib/list.js +213 -112
  286. package/list/lib/list.js.map +1 -1
  287. package/list/lib/listitem/_list-item.scss +122 -56
  288. package/list/lib/listitem/harness.js +2 -1
  289. package/list/lib/listitem/harness.js.map +1 -1
  290. package/list/lib/listitem/list-item-private-styles.css.js +9 -0
  291. package/list/lib/listitem/list-item-private-styles.css.js.map +1 -0
  292. package/list/lib/listitem/list-item-private-styles.scss +10 -0
  293. package/list/lib/listitem/list-item-styles.css.js +1 -1
  294. package/list/lib/listitem/list-item-styles.css.js.map +1 -1
  295. package/list/lib/listitem/list-item-styles.scss +2 -0
  296. package/list/lib/listitem/list-item.d.ts +99 -43
  297. package/list/lib/listitem/list-item.js +204 -173
  298. package/list/lib/listitem/list-item.js.map +1 -1
  299. package/list/lib/listitemlink/list-item-link.d.ts +17 -0
  300. package/list/lib/listitemlink/list-item-link.js +42 -0
  301. package/list/lib/listitemlink/list-item-link.js.map +1 -0
  302. package/list/lib/video/_list-item-video.scss +15 -5
  303. package/list/lib/video/list-item-video-styles.css.js +1 -1
  304. package/list/lib/video/list-item-video-styles.css.js.map +1 -1
  305. package/list/lib/video/list-item-video-styles.scss +2 -0
  306. package/list/lib/video/list-item-video.d.ts +43 -4
  307. package/list/lib/video/list-item-video.js +90 -12
  308. package/list/lib/video/list-item-video.js.map +1 -1
  309. package/list/list-item-avatar.d.ts +2 -1
  310. package/list/list-item-avatar.js +2 -1
  311. package/list/list-item-avatar.js.map +1 -1
  312. package/list/list-item-icon.d.ts +2 -1
  313. package/list/list-item-icon.js +2 -1
  314. package/list/list-item-icon.js.map +1 -1
  315. package/list/list-item-image.d.ts +2 -1
  316. package/list/list-item-image.js +2 -1
  317. package/list/list-item-image.js.map +1 -1
  318. package/list/list-item-link.d.ts +35 -0
  319. package/list/list-item-link.js +39 -0
  320. package/list/list-item-link.js.map +1 -0
  321. package/list/list-item-video.d.ts +2 -1
  322. package/list/list-item-video.js +2 -1
  323. package/list/list-item-video.js.map +1 -1
  324. package/list/list-item.d.ts +18 -2
  325. package/list/list-item.js +20 -3
  326. package/list/list-item.js.map +1 -1
  327. package/list/list.d.ts +15 -1
  328. package/list/list.js +15 -1
  329. package/list/list.js.map +1 -1
  330. package/menu/_menu-item.scss +6 -0
  331. package/menu/_menu.scss +6 -0
  332. package/menu/harness.d.ts +5 -0
  333. package/menu/harness.js +22 -0
  334. package/menu/harness.js.map +1 -1
  335. package/menu/lib/_menu.scss +64 -62
  336. package/menu/lib/menu-styles.css.js +1 -1
  337. package/menu/lib/menu-styles.css.js.map +1 -1
  338. package/menu/lib/menu-styles.scss +2 -0
  339. package/menu/lib/menu.d.ts +177 -43
  340. package/menu/lib/menu.js +506 -246
  341. package/menu/lib/menu.js.map +1 -1
  342. package/menu/lib/menuitem/_menu-item.scss +123 -0
  343. package/menu/lib/menuitem/menu-item-private-styles.css.js +9 -0
  344. package/menu/lib/menuitem/menu-item-private-styles.css.js.map +1 -0
  345. package/menu/lib/menuitem/menu-item-private-styles.scss +10 -0
  346. package/menu/lib/menuitem/menu-item-styles.css.d.ts +1 -0
  347. package/menu/lib/menuitem/menu-item-styles.css.js +9 -0
  348. package/menu/lib/menuitem/menu-item-styles.css.js.map +1 -0
  349. package/menu/lib/menuitem/menu-item-styles.scss +10 -0
  350. package/menu/lib/menuitem/menu-item.d.ts +20 -3
  351. package/menu/lib/menuitem/menu-item.js +42 -3
  352. package/menu/lib/menuitem/menu-item.js.map +1 -1
  353. package/menu/lib/menuitemlink/menu-item-link.d.ts +25 -0
  354. package/menu/lib/menuitemlink/menu-item-link.js +51 -0
  355. package/menu/lib/menuitemlink/menu-item-link.js.map +1 -0
  356. package/menu/lib/shared.d.ts +134 -0
  357. package/menu/lib/shared.js +85 -0
  358. package/menu/lib/shared.js.map +1 -0
  359. package/menu/lib/submenuitem/harness.d.ts +11 -0
  360. package/menu/lib/submenuitem/harness.js +12 -0
  361. package/menu/lib/submenuitem/harness.js.map +1 -0
  362. package/menu/lib/submenuitem/sub-menu-item.d.ts +89 -0
  363. package/menu/lib/submenuitem/sub-menu-item.js +266 -0
  364. package/menu/lib/submenuitem/sub-menu-item.js.map +1 -0
  365. package/menu/lib/surfacePositionController.d.ts +117 -0
  366. package/menu/lib/surfacePositionController.js +196 -0
  367. package/menu/lib/surfacePositionController.js.map +1 -0
  368. package/menu/lib/typeaheadController.d.ts +144 -0
  369. package/menu/lib/typeaheadController.js +242 -0
  370. package/menu/lib/typeaheadController.js.map +1 -0
  371. package/menu/menu-item-link.d.ts +33 -0
  372. package/menu/menu-item-link.js +37 -0
  373. package/menu/menu-item-link.js.map +1 -0
  374. package/menu/menu-item.d.ts +19 -2
  375. package/menu/menu-item.js +22 -4
  376. package/menu/menu-item.js.map +1 -1
  377. package/menu/menu.d.ts +45 -0
  378. package/menu/menu.js +43 -0
  379. package/menu/menu.js.map +1 -1
  380. package/menu/sub-menu-item.d.ts +60 -0
  381. package/menu/sub-menu-item.js +64 -0
  382. package/menu/sub-menu-item.js.map +1 -0
  383. package/menusurface/lib/_md-comp-menu-surface.scss +4 -0
  384. package/menusurface/lib/_menu-surface.scss +5 -1
  385. package/menusurface/lib/foundation.js +31 -31
  386. package/menusurface/lib/foundation.js.map +1 -1
  387. package/menusurface/lib/menu-surface-styles.css.js +1 -1
  388. package/menusurface/lib/menu-surface-styles.css.js.map +1 -1
  389. package/menusurface/lib/menu-surface-styles.scss +2 -0
  390. package/menusurface/lib/menu-surface.d.ts +2 -2
  391. package/menusurface/lib/menu-surface.js.map +1 -1
  392. package/menusurface/menu-surface.js.map +1 -1
  393. package/motion/animation.d.ts +20 -3
  394. package/motion/animation.js +39 -4
  395. package/motion/animation.js.map +1 -1
  396. package/navigationbar/lib/_navigation-bar.scss +11 -9
  397. package/navigationbar/lib/constants.d.ts +1 -1
  398. package/navigationbar/lib/navigation-bar-styles.css.js +1 -1
  399. package/navigationbar/lib/navigation-bar-styles.css.js.map +1 -1
  400. package/navigationbar/lib/navigation-bar-styles.scss +2 -0
  401. package/navigationbar/lib/navigation-bar.js.map +1 -1
  402. package/navigationbar/navigation-bar.js.map +1 -1
  403. package/navigationdrawer/lib/_navigation-drawer-modal.scss +11 -2
  404. package/navigationdrawer/lib/_navigation-drawer.scss +11 -6
  405. package/navigationdrawer/lib/_shared.scss +4 -8
  406. package/navigationdrawer/lib/navigation-drawer-modal-styles.css.js +1 -1
  407. package/navigationdrawer/lib/navigation-drawer-modal-styles.css.js.map +1 -1
  408. package/navigationdrawer/lib/navigation-drawer-modal-styles.scss +2 -0
  409. package/navigationdrawer/lib/navigation-drawer-modal.js.map +1 -1
  410. package/navigationdrawer/lib/navigation-drawer-styles.css.js +1 -1
  411. package/navigationdrawer/lib/navigation-drawer-styles.css.js.map +1 -1
  412. package/navigationdrawer/lib/navigation-drawer-styles.scss +2 -0
  413. package/navigationdrawer/lib/navigation-drawer.js.map +1 -1
  414. package/navigationdrawer/lib/shared-styles.scss +2 -0
  415. package/navigationdrawer/navigation-drawer-modal.js.map +1 -1
  416. package/navigationdrawer/navigation-drawer.js.map +1 -1
  417. package/navigationtab/lib/_navigation-tab.scss +34 -41
  418. package/navigationtab/lib/navigation-tab-styles.css.js +1 -1
  419. package/navigationtab/lib/navigation-tab-styles.css.js.map +1 -1
  420. package/navigationtab/lib/navigation-tab-styles.scss +2 -0
  421. package/navigationtab/lib/navigation-tab.js +4 -4
  422. package/navigationtab/lib/navigation-tab.js.map +1 -1
  423. package/navigationtab/navigation-tab.js.map +1 -1
  424. package/package.json +2 -9
  425. package/radio/lib/_radio.scss +16 -15
  426. package/radio/lib/forced-colors-styles.scss +2 -0
  427. package/radio/lib/radio-styles.css.js +1 -1
  428. package/radio/lib/radio-styles.css.js.map +1 -1
  429. package/radio/lib/radio-styles.scss +2 -0
  430. package/radio/lib/radio.d.ts +10 -1
  431. package/radio/lib/radio.js +28 -19
  432. package/radio/lib/radio.js.map +1 -1
  433. package/radio/radio.d.ts +16 -1
  434. package/radio/radio.js +16 -1
  435. package/radio/radio.js.map +1 -1
  436. package/ripple/directive.d.ts +1 -33
  437. package/ripple/directive.js +7 -194
  438. package/ripple/directive.js.map +1 -1
  439. package/ripple/lib/_md-comp-ripple.scss +20 -19
  440. package/ripple/lib/_ripple.scss +24 -40
  441. package/ripple/lib/ripple-styles.css.js +1 -1
  442. package/ripple/lib/ripple-styles.css.js.map +1 -1
  443. package/ripple/lib/ripple-styles.scss +2 -0
  444. package/ripple/lib/ripple.d.ts +50 -48
  445. package/ripple/lib/ripple.js +215 -77
  446. package/ripple/lib/ripple.js.map +1 -1
  447. package/ripple/ripple.d.ts +9 -1
  448. package/ripple/ripple.js +9 -1
  449. package/ripple/ripple.js.map +1 -1
  450. package/sass/_assert.scss +2 -0
  451. package/sass/_color-scheme.scss +4 -0
  452. package/sass/_color.scss +4 -0
  453. package/sass/_elevation.scss +4 -0
  454. package/sass/_feature-flags.scss +2 -0
  455. package/sass/_map-ext.scss +26 -0
  456. package/sass/_resolvers.scss +4 -4
  457. package/sass/_shape.scss +75 -27
  458. package/sass/_string-ext.scss +67 -0
  459. package/sass/_theme.scss +4 -0
  460. package/sass/_typography.scss +18 -93
  461. package/sass/_var.scss +4 -0
  462. package/segmentedbutton/lib/_outlined-segmented-button.scss +4 -0
  463. package/segmentedbutton/lib/_shared.scss +18 -22
  464. package/segmentedbutton/lib/outlined-styles.css.js +1 -1
  465. package/segmentedbutton/lib/outlined-styles.css.js.map +1 -1
  466. package/segmentedbutton/lib/outlined-styles.scss +2 -0
  467. package/segmentedbutton/lib/segmented-button.js +4 -4
  468. package/segmentedbutton/lib/segmented-button.js.map +1 -1
  469. package/segmentedbutton/lib/shared-styles.css.js +1 -1
  470. package/segmentedbutton/lib/shared-styles.css.js.map +1 -1
  471. package/segmentedbutton/lib/shared-styles.scss +2 -0
  472. package/segmentedbutton/outlined-segmented-button.js.map +1 -1
  473. package/segmentedbuttonset/lib/_outlined-segmented-button-set.scss +9 -5
  474. package/segmentedbuttonset/lib/_shared.scss +0 -13
  475. package/segmentedbuttonset/lib/outlined-styles.css.js +1 -1
  476. package/segmentedbuttonset/lib/outlined-styles.css.js.map +1 -1
  477. package/segmentedbuttonset/lib/outlined-styles.scss +2 -0
  478. package/segmentedbuttonset/lib/segmented-button-set.d.ts +0 -2
  479. package/segmentedbuttonset/lib/segmented-button-set.js +0 -2
  480. package/segmentedbuttonset/lib/segmented-button-set.js.map +1 -1
  481. package/segmentedbuttonset/lib/shared-styles.scss +2 -0
  482. package/segmentedbuttonset/outlined-segmented-button-set.js.map +1 -1
  483. package/slider/_slider.scss +6 -0
  484. package/slider/harness.d.ts +20 -0
  485. package/slider/harness.js +63 -0
  486. package/slider/harness.js.map +1 -0
  487. package/slider/lib/_slider.scss +503 -0
  488. package/slider/lib/_tokens.scss +66 -0
  489. package/slider/lib/forced-colors-styles.css.d.ts +1 -0
  490. package/slider/lib/forced-colors-styles.css.js +9 -0
  491. package/slider/lib/forced-colors-styles.css.js.map +1 -0
  492. package/slider/lib/forced-colors-styles.scss +53 -0
  493. package/slider/lib/slider-styles.css.d.ts +1 -0
  494. package/slider/lib/slider-styles.css.js +9 -0
  495. package/slider/lib/slider-styles.css.js.map +1 -0
  496. package/slider/lib/slider-styles.scss +8 -0
  497. package/slider/lib/slider.d.ts +158 -0
  498. package/slider/lib/slider.js +575 -0
  499. package/slider/lib/slider.js.map +1 -0
  500. package/slider/slider.d.ts +28 -0
  501. package/slider/slider.js +32 -0
  502. package/slider/slider.js.map +1 -0
  503. package/switch/lib/README.md +55 -0
  504. package/switch/lib/_handle.scss +72 -26
  505. package/switch/lib/_icon.scss +40 -0
  506. package/switch/lib/_switch.scss +12 -133
  507. package/switch/lib/_track.scss +41 -0
  508. package/switch/lib/switch-styles.css.js +1 -1
  509. package/switch/lib/switch-styles.css.js.map +1 -1
  510. package/switch/lib/switch-styles.scss +2 -0
  511. package/switch/lib/switch.d.ts +3 -0
  512. package/switch/lib/switch.js +12 -9
  513. package/switch/lib/switch.js.map +1 -1
  514. package/switch/switch.js.map +1 -1
  515. package/textfield/filled-text-field.d.ts +1 -1
  516. package/textfield/filled-text-field.js +1 -2
  517. package/textfield/filled-text-field.js.map +1 -1
  518. package/textfield/harness.js +1 -1
  519. package/textfield/harness.js.map +1 -1
  520. package/textfield/lib/_filled-text-field.scss +29 -23
  521. package/textfield/lib/_icon.scss +41 -56
  522. package/textfield/lib/_input.scss +17 -36
  523. package/textfield/lib/_outlined-text-field.scss +29 -23
  524. package/textfield/lib/_shared.scss +10 -29
  525. package/textfield/lib/filled-forced-colors-styles.scss +2 -0
  526. package/textfield/lib/filled-styles.css.js +1 -1
  527. package/textfield/lib/filled-styles.css.js.map +1 -1
  528. package/textfield/lib/filled-styles.scss +2 -0
  529. package/textfield/lib/filled-text-field.d.ts +6 -5
  530. package/textfield/lib/filled-text-field.js +8 -7
  531. package/textfield/lib/filled-text-field.js.map +1 -1
  532. package/textfield/lib/outlined-forced-colors-styles.scss +2 -0
  533. package/textfield/lib/outlined-styles.css.js +1 -1
  534. package/textfield/lib/outlined-styles.css.js.map +1 -1
  535. package/textfield/lib/outlined-styles.scss +2 -0
  536. package/textfield/lib/outlined-text-field.d.ts +6 -5
  537. package/textfield/lib/outlined-text-field.js +8 -7
  538. package/textfield/lib/outlined-text-field.js.map +1 -1
  539. package/textfield/lib/shared-styles.css.js +1 -1
  540. package/textfield/lib/shared-styles.css.js.map +1 -1
  541. package/textfield/lib/shared-styles.scss +2 -0
  542. package/textfield/lib/text-field.d.ts +40 -90
  543. package/textfield/lib/text-field.js +194 -272
  544. package/textfield/lib/text-field.js.map +1 -1
  545. package/textfield/outlined-text-field.d.ts +1 -1
  546. package/textfield/outlined-text-field.js +1 -2
  547. package/textfield/outlined-text-field.js.map +1 -1
  548. package/tokens/_index.scss +1 -1
  549. package/tokens/{v0_150 → v0_160}/_index.scss +1 -1
  550. package/tokens/{v0_150 → v0_160}/_md-comp-assist-chip.scss +2 -2
  551. package/tokens/{v0_150 → v0_160}/_md-comp-badge.scss +2 -2
  552. package/tokens/{v0_150 → v0_160}/_md-comp-banner.scss +2 -43
  553. package/tokens/{v0_150 → v0_160}/_md-comp-bottom-app-bar.scss +3 -4
  554. package/tokens/{v0_150 → v0_160}/_md-comp-carousel-item.scss +2 -2
  555. package/tokens/{v0_150 → v0_160}/_md-comp-checkbox.scss +5 -26
  556. package/tokens/{v0_150 → v0_160}/_md-comp-circular-progress-indicator.scss +2 -2
  557. package/tokens/{v0_150 → v0_160}/_md-comp-data-table.scss +2 -6
  558. package/tokens/{v0_150 → v0_160}/_md-comp-date-input-modal.scss +11 -11
  559. package/tokens/{v0_150 → v0_160}/_md-comp-date-picker-docked.scss +24 -24
  560. package/tokens/{v0_150 → v0_160}/_md-comp-date-picker-modal.scss +35 -35
  561. package/tokens/{v0_150 → v0_160}/_md-comp-dialog.scss +2 -25
  562. package/tokens/{v0_150 → v0_160}/_md-comp-divider.scss +2 -2
  563. package/tokens/{v0_150 → v0_160}/_md-comp-elevated-button.scss +2 -2
  564. package/tokens/{v0_150 → v0_160}/_md-comp-elevated-card.scss +2 -2
  565. package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-branded.scss +2 -2
  566. package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-primary.scss +2 -2
  567. package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-secondary.scss +2 -2
  568. package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-surface.scss +2 -2
  569. package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-tertiary.scss +2 -4
  570. package/tokens/{v0_150 → v0_160}/_md-comp-fab-branded-large.scss +2 -3
  571. package/tokens/{v0_150 → v0_160}/_md-comp-fab-branded.scss +2 -2
  572. package/tokens/{v0_150 → v0_160}/_md-comp-fab-primary-large.scss +2 -2
  573. package/tokens/{v0_150 → v0_160}/_md-comp-fab-primary-small.scss +2 -2
  574. package/tokens/{v0_150 → v0_160}/_md-comp-fab-primary.scss +2 -2
  575. package/tokens/{v0_150 → v0_160}/_md-comp-fab-secondary-large.scss +2 -2
  576. package/tokens/{v0_150 → v0_160}/_md-comp-fab-secondary-small.scss +2 -2
  577. package/tokens/{v0_150 → v0_160}/_md-comp-fab-secondary.scss +2 -2
  578. package/tokens/{v0_150 → v0_160}/_md-comp-fab-surface-large.scss +2 -2
  579. package/tokens/{v0_150 → v0_160}/_md-comp-fab-surface-small.scss +2 -2
  580. package/tokens/{v0_150 → v0_160}/_md-comp-fab-surface.scss +2 -2
  581. package/tokens/{v0_150 → v0_160}/_md-comp-fab-tertiary-large.scss +2 -2
  582. package/tokens/{v0_150 → v0_160}/_md-comp-fab-tertiary-small.scss +2 -2
  583. package/tokens/{v0_150 → v0_160}/_md-comp-fab-tertiary.scss +2 -2
  584. package/tokens/{v0_150 → v0_160}/_md-comp-filled-autocomplete.scss +2 -3
  585. package/tokens/{v0_150 → v0_160}/_md-comp-filled-button.scss +2 -8
  586. package/tokens/{v0_150 → v0_160}/_md-comp-filled-card.scss +2 -4
  587. package/tokens/{v0_150 → v0_160}/_md-comp-filled-icon-button.scss +2 -2
  588. package/tokens/{v0_150 → v0_160}/_md-comp-filled-menu-button.scss +2 -2
  589. package/tokens/{v0_150 → v0_160}/_md-comp-filled-select.scss +2 -6
  590. package/tokens/{v0_150 → v0_160}/_md-comp-filled-text-field.scss +2 -3
  591. package/tokens/{v0_150 → v0_160}/_md-comp-filled-tonal-button.scss +2 -2
  592. package/tokens/{v0_150 → v0_160}/_md-comp-filled-tonal-icon-button.scss +2 -2
  593. package/tokens/{v0_150 → v0_160}/_md-comp-filter-chip.scss +2 -30
  594. package/tokens/{v0_150 → v0_160}/_md-comp-full-screen-dialog.scss +3 -53
  595. package/tokens/{v0_150 → v0_160}/_md-comp-icon-button.scss +3 -3
  596. package/tokens/{v0_150 → v0_160}/_md-comp-input-chip.scss +2 -52
  597. package/tokens/{v0_150 → v0_160}/_md-comp-linear-progress-indicator.scss +2 -2
  598. package/tokens/{v0_150 → v0_160}/_md-comp-list.scss +3 -12
  599. package/tokens/{v0_150 → v0_160}/_md-comp-menu.scss +2 -4
  600. package/tokens/{v0_150 → v0_160}/_md-comp-navigation-bar.scss +2 -9
  601. package/tokens/{v0_150 → v0_160}/_md-comp-navigation-drawer.scss +2 -8
  602. package/tokens/{v0_150 → v0_160}/_md-comp-navigation-rail.scss +2 -39
  603. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-autocomplete.scss +2 -3
  604. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-button.scss +2 -6
  605. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-card.scss +2 -2
  606. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-icon-button.scss +2 -4
  607. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-menu-button.scss +2 -2
  608. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-segmented-button.scss +2 -2
  609. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-select.scss +2 -6
  610. package/tokens/{v0_150 → v0_160}/_md-comp-outlined-text-field.scss +2 -3
  611. package/tokens/{v0_150 → v0_160}/_md-comp-plain-tooltip.scss +2 -2
  612. package/tokens/{v0_150 → v0_160}/_md-comp-primary-navigation-tab.scss +2 -4
  613. package/tokens/{v0_150 → v0_160}/_md-comp-radio-button.scss +2 -2
  614. package/tokens/{v0_150 → v0_160}/_md-comp-rich-tooltip.scss +2 -2
  615. package/tokens/{v0_150 → v0_160}/_md-comp-scrim.scss +2 -2
  616. package/tokens/{v0_150 → v0_160}/_md-comp-search-bar.scss +2 -2
  617. package/tokens/{v0_150 → v0_160}/_md-comp-search-view.scss +2 -2
  618. package/tokens/{v0_150 → v0_160}/_md-comp-secondary-navigation-tab.scss +2 -4
  619. package/tokens/{v0_150 → v0_160}/_md-comp-sheet-bottom.scss +2 -2
  620. package/tokens/{v0_150 → v0_160}/_md-comp-sheet-floating.scss +2 -2
  621. package/tokens/{v0_150 → v0_160}/_md-comp-sheet-side.scss +13 -11
  622. package/tokens/{v0_150 → v0_160}/_md-comp-slider.scss +2 -4
  623. package/tokens/{v0_150 → v0_160}/_md-comp-snackbar.scss +2 -2
  624. package/tokens/{v0_150 → v0_160}/_md-comp-standard-menu-button.scss +2 -2
  625. package/tokens/{v0_150 → v0_160}/_md-comp-suggestion-chip.scss +2 -2
  626. package/tokens/{v0_150 → v0_160}/_md-comp-switch.scss +2 -11
  627. package/tokens/{v0_150 → v0_160}/_md-comp-text-button.scss +2 -6
  628. package/tokens/{v0_150 → v0_160}/_md-comp-time-input.scss +2 -2
  629. package/tokens/{v0_150 → v0_160}/_md-comp-time-picker.scss +2 -5
  630. package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-large.scss +2 -2
  631. package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-medium.scss +2 -2
  632. package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-small-centered.scss +2 -3
  633. package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-small.scss +2 -3
  634. package/tokens/{v0_150 → v0_160}/_md-ref-palette.scss +2 -2
  635. package/tokens/{v0_150 → v0_160}/_md-ref-typeface.scss +2 -2
  636. package/tokens/{v0_150 → v0_160}/_md-sys-color.scss +218 -20
  637. package/tokens/{v0_150 → v0_160}/_md-sys-elevation.scss +4 -13
  638. package/tokens/{v0_150 → v0_160}/_md-sys-motion.scss +2 -2
  639. package/tokens/{v0_150 → v0_160}/_md-sys-shape.scss +2 -2
  640. package/tokens/{v0_150 → v0_160}/_md-sys-state.scss +2 -2
  641. package/tokens/{v0_150 → v0_160}/_md-sys-typescale.scss +2 -3
  642. package/tokens/v0_160/index.test.css.d.ts +1 -0
  643. package/tokens/{v0_150 → v0_160}/index.test.scss +1 -1
  644. package/tokens/v0_160/lib.test.css.d.ts +1 -0
  645. package/tokens/{v0_150 → v0_160}/lib.test.scss +1 -1
  646. package/list/lib/_tokens.scss +0 -80
  647. package/list/lib/divider/_list-divider.scss +0 -46
  648. package/list/lib/divider/list-divider-styles.css.js +0 -9
  649. package/list/lib/divider/list-divider-styles.css.js.map +0 -1
  650. package/list/lib/divider/list-divider-styles.scss +0 -8
  651. package/list/lib/divider/list-divider.d.ts +0 -13
  652. package/list/lib/divider/list-divider.js +0 -32
  653. package/list/lib/divider/list-divider.js.map +0 -1
  654. package/list/list-divider.d.ts +0 -19
  655. package/list/list-divider.js +0 -22
  656. package/list/list-divider.js.map +0 -1
  657. package/menu/lib/_menu-button.scss +0 -14
  658. package/menu/lib/adapter.d.ts +0 -66
  659. package/menu/lib/adapter.js +0 -7
  660. package/menu/lib/adapter.js.map +0 -1
  661. package/menu/lib/constants.d.ts +0 -22
  662. package/menu/lib/constants.js +0 -23
  663. package/menu/lib/constants.js.map +0 -1
  664. package/menu/lib/foundation.d.ts +0 -49
  665. package/menu/lib/foundation.js +0 -123
  666. package/menu/lib/foundation.js.map +0 -1
  667. package/menu/lib/menu-button-styles.css.js +0 -9
  668. package/menu/lib/menu-button-styles.css.js.map +0 -1
  669. package/menu/lib/menu-button-styles.scss +0 -8
  670. package/menu/lib/menu-button.d.ts +0 -27
  671. package/menu/lib/menu-button.js +0 -93
  672. package/menu/lib/menu-button.js.map +0 -1
  673. package/menu/menu-button.d.ts +0 -14
  674. package/menu/menu-button.js +0 -17
  675. package/menu/menu-button.js.map +0 -1
  676. /package/{list/lib/divider/list-divider-styles.css.d.ts → dialog/lib/dialog-styles.css.d.ts} +0 -0
  677. /package/{menu/lib/menu-button-styles.css.d.ts → divider/lib/divider-styles.css.d.ts} +0 -0
  678. /package/{tokens/v0_150/index.test.css.d.ts → list/lib/listitem/list-item-private-styles.css.d.ts} +0 -0
  679. /package/{tokens/v0_150/lib.test.css.d.ts → menu/lib/menuitem/menu-item-private-styles.css.d.ts} +0 -0
  680. /package/tokens/{v0_150 → v0_160}/index.test.css.js +0 -0
  681. /package/tokens/{v0_150 → v0_160}/index.test.css.js.map +0 -0
  682. /package/tokens/{v0_150 → v0_160}/lib.test.css.js +0 -0
  683. /package/tokens/{v0_150 → v0_160}/lib.test.css.js.map +0 -0
@@ -0,0 +1,575 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { __decorate, __metadata } from "tslib";
7
+ import '../../elevation/elevation.js';
8
+ import '../../focus/focus-ring.js';
9
+ import '../../ripple/ripple.js';
10
+ import { html, LitElement, nothing } from 'lit';
11
+ import { property, query, queryAsync, state } from 'lit/decorators.js';
12
+ import { classMap } from 'lit/directives/class-map.js';
13
+ import { styleMap } from 'lit/directives/style-map.js';
14
+ import { when } from 'lit/directives/when.js';
15
+ import { dispatchActivationClick, isActivationClick, redispatchEvent } from '../../controller/events.js';
16
+ import { FormController, getFormValue } from '../../controller/form-controller.js';
17
+ import { stringConverter } from '../../controller/string-converter.js';
18
+ import { ariaProperty } from '../../decorators/aria-property.js';
19
+ import { pointerPress, shouldShowStrongFocus } from '../../focus/strong-focus.js';
20
+ import { ripple } from '../../ripple/directive.js';
21
+ // This is required for decorators.
22
+ // tslint:disable:no-new-decorators
23
+ // Disable warning for classMap with destructuring
24
+ // tslint:disable:quoted-properties-on-dictionary
25
+ function inBounds({ x, y }, element) {
26
+ if (!element) {
27
+ return false;
28
+ }
29
+ const { top, left, bottom, right } = element.getBoundingClientRect();
30
+ return x >= left && x <= right && y >= top && y <= bottom;
31
+ }
32
+ // parse values like: foo or foo,bar
33
+ function tupleConverter(attr) {
34
+ const [, v, e] = attr?.match(/\s*\[?\s*([^,]+)(?:(?:\s*$)|(?:\s*,\s*(.*)\s*))/) ?? [];
35
+ return e !== undefined ? [v, e] : v;
36
+ }
37
+ function toNumber(value) {
38
+ return Number(value) || 0;
39
+ }
40
+ function tupleAsString(value) {
41
+ return Array.isArray(value) ? value.join() : String(value ?? '');
42
+ }
43
+ function valueConverter(attr) {
44
+ const value = tupleConverter(attr);
45
+ return Array.isArray(value) ? value.map(i => toNumber(i)) : toNumber(value);
46
+ }
47
+ function clamp(value, min, max) {
48
+ return Math.max(min, Math.min(max, value));
49
+ }
50
+ function isOverlapping(elA, elB) {
51
+ if (!(elA && elB)) {
52
+ return false;
53
+ }
54
+ const a = elA.getBoundingClientRect();
55
+ const b = elB.getBoundingClientRect();
56
+ return !(a.top > b.bottom || a.right < b.left || a.bottom < b.top ||
57
+ a.left > b.right);
58
+ }
59
+ /**
60
+ * Slider component.
61
+ */
62
+ export class Slider extends LitElement {
63
+ /**
64
+ * The associated form element with which this element's value will submit.
65
+ */
66
+ get form() {
67
+ return this.closest('form');
68
+ }
69
+ /**
70
+ * Read only computed value representing the fraction between 0 and 1
71
+ * respresenting the value's position between min and max. This is a
72
+ * single fraction or a tuple if the value specifies start and end values.
73
+ */
74
+ get valueAsFraction() {
75
+ const { lowerFraction, upperFraction } = this.getMetrics();
76
+ return this.allowRange ? [lowerFraction, upperFraction] : upperFraction;
77
+ }
78
+ getMetrics() {
79
+ const step = Math.max(this.step, 1);
80
+ const range = Math.max(this.max - this.min, step);
81
+ const lower = Math.min(this.valueA, this.valueB);
82
+ const upper = Math.max(this.valueA, this.valueB);
83
+ const lowerFraction = (lower - this.min) / range;
84
+ const upperFraction = (upper - this.min) / range;
85
+ return {
86
+ step,
87
+ range,
88
+ lower,
89
+ upper,
90
+ lowerFraction,
91
+ upperFraction,
92
+ };
93
+ }
94
+ constructor() {
95
+ super();
96
+ /**
97
+ * Whether or not the slider is disabled.
98
+ */
99
+ this.disabled = false;
100
+ /**
101
+ * The slider minimum value
102
+ */
103
+ this.min = 0;
104
+ /**
105
+ * The slider maximum value
106
+ */
107
+ this.max = 10;
108
+ /**
109
+ * The slider value, can be a single number, or an array tuple indicating
110
+ * a start and end value.
111
+ */
112
+ this.value = 0;
113
+ /**
114
+ * The step between values.
115
+ */
116
+ this.step = 1;
117
+ /**
118
+ * Whether or not to show tick marks.
119
+ */
120
+ this.withTickMarks = false;
121
+ /**
122
+ * Whether or not to show a value label when activated.
123
+ */
124
+ this.withLabel = false;
125
+ /**
126
+ * The HTML name to use in form submission.
127
+ */
128
+ this.name = '';
129
+ this.valueA = 0;
130
+ this.valueB = 0;
131
+ this.focusRingAShowing = false;
132
+ this.focusRingBShowing = false;
133
+ // allows for lazy rendering of the focus ring by latchin to true when the
134
+ // focus ring should be rendered.
135
+ this.focusRingARequested = false;
136
+ this.focusRingBRequested = false;
137
+ this.rippleAShowing = false;
138
+ this.rippleBShowing = false;
139
+ // handle hover/pressed states are set manually since the handle
140
+ // does not receive pointer events so that the native inputs are
141
+ // interaction targets.
142
+ this.handleAHover = false;
143
+ this.handleBHover = false;
144
+ this.handleAPressed = false;
145
+ this.handleBPressed = false;
146
+ this.onTopId = 'b';
147
+ this.handlesOverlapping = false;
148
+ this.isInteracting = false;
149
+ // If range should be allowed (detected via value format).
150
+ this.allowRange = false;
151
+ this.renderRipple = (id) => html `<md-ripple class=${id} ?disabled=${this.disabled} unbounded></md-ripple>`;
152
+ this.getRippleA = () => {
153
+ if (!this.handleAHover) {
154
+ return null;
155
+ }
156
+ this.rippleAShowing = true;
157
+ return this.rippleA;
158
+ };
159
+ this.getRippleB = () => {
160
+ if (!this.handleBHover) {
161
+ return null;
162
+ }
163
+ this.rippleBShowing = true;
164
+ return this.rippleB;
165
+ };
166
+ this.addController(new FormController(this));
167
+ this.addEventListener('click', (event) => {
168
+ if (!isActivationClick(event)) {
169
+ return;
170
+ }
171
+ this.focus();
172
+ dispatchActivationClick(this.inputB);
173
+ });
174
+ }
175
+ focus() {
176
+ this.inputB?.focus();
177
+ }
178
+ get valueAsString() {
179
+ return tupleAsString(this.value);
180
+ }
181
+ // value coerced to a string
182
+ [getFormValue]() {
183
+ return this.valueAsString;
184
+ }
185
+ // indicates input values are crossed over each other from initial rendering.
186
+ isFlipped() {
187
+ return this.valueA > this.valueB;
188
+ }
189
+ willUpdate(changed) {
190
+ if (changed.has('value') || changed.has('min') || changed.has('max') ||
191
+ changed.has('step')) {
192
+ this.allowRange = Array.isArray(this.value);
193
+ const step = Math.max(this.step, 1);
194
+ let lower = this.allowRange ? this.value[0] : this.min;
195
+ lower = clamp(lower - (lower % step), this.min, this.max);
196
+ let upper = this.allowRange ? this.value[1] :
197
+ this.value;
198
+ upper = clamp(upper - (upper % step), this.min, this.max);
199
+ const isFlipped = this.isFlipped() && this.allowRange;
200
+ this.valueA = isFlipped ? upper : lower;
201
+ this.valueB = isFlipped ? lower : upper;
202
+ }
203
+ // manually handle ripple hover state since the handle is pointer events
204
+ // none.
205
+ if (changed.get('handleAHover') !== undefined) {
206
+ this.rippleAShowing = true;
207
+ this.toggleRippleHover(this.rippleA, this.handleAHover);
208
+ }
209
+ else if (changed.get('handleBHover') !== undefined) {
210
+ this.rippleBShowing = true;
211
+ this.toggleRippleHover(this.rippleB, this.handleBHover);
212
+ }
213
+ // facilitates lazy rendering of the focus ring.
214
+ this.focusRingARequested || (this.focusRingARequested = this.focusRingAShowing);
215
+ this.focusRingBRequested || (this.focusRingBRequested = this.focusRingBShowing);
216
+ }
217
+ async updated(changed) {
218
+ if (changed.has('value') || changed.has('valueA') ||
219
+ changed.has('valueB')) {
220
+ await this.updateComplete;
221
+ this.handlesOverlapping = isOverlapping(this.handleA, this.handleB);
222
+ }
223
+ }
224
+ render() {
225
+ const { step, range, lowerFraction, upperFraction } = this.getMetrics();
226
+ const isFlipped = this.isFlipped();
227
+ const containerStyles = {
228
+ // for clipping inputs and active track.
229
+ '--lowerFraction': String(lowerFraction),
230
+ '--upperFraction': String(upperFraction),
231
+ // for generating tick marks
232
+ '--tickCount': String(range / step)
233
+ };
234
+ const containerClasses = {
235
+ interacting: this.isInteracting,
236
+ ranged: this.allowRange
237
+ };
238
+ // optional label values to show in place of the value.
239
+ const labelA = String(this.valueLabel?.[isFlipped ? 1 : 0] ?? this.valueA);
240
+ const labelB = String((this.allowRange ? this.valueLabel?.[isFlipped ? 0 : 1] :
241
+ this.valueLabel) ??
242
+ this.valueB);
243
+ const inputAProps = {
244
+ id: 'a',
245
+ lesser: !isFlipped,
246
+ value: this.valueA,
247
+ label: labelA,
248
+ getRipple: this.getRippleA
249
+ };
250
+ const inputBProps = {
251
+ id: 'b',
252
+ lesser: isFlipped,
253
+ value: this.valueB,
254
+ label: labelB,
255
+ getRipple: this.getRippleB
256
+ };
257
+ const handleAProps = {
258
+ id: 'a',
259
+ lesser: !isFlipped,
260
+ showRipple: this.rippleAShowing,
261
+ focusRequested: this.focusRingARequested,
262
+ showFocus: this.focusRingAShowing,
263
+ hover: this.handleAHover,
264
+ pressed: this.handleAPressed,
265
+ label: labelA
266
+ };
267
+ const handleBProps = {
268
+ id: 'b',
269
+ lesser: isFlipped,
270
+ showRipple: this.rippleBShowing,
271
+ focusRequested: this.focusRingBRequested,
272
+ showFocus: this.focusRingBShowing,
273
+ hover: this.handleBHover,
274
+ pressed: this.handleBPressed,
275
+ label: labelB
276
+ };
277
+ const handleContainerClasses = {
278
+ hover: this.handleAHover || this.handleBHover
279
+ };
280
+ return html `
281
+ <div
282
+ class="container ${classMap(containerClasses)}"
283
+ style=${styleMap(containerStyles)}
284
+ >
285
+ ${when(this.allowRange, () => this.renderInput(inputAProps))}
286
+ ${this.renderInput(inputBProps)}
287
+ ${this.renderTrack()}
288
+ <div class="handleContainerPadded">
289
+ <div class="handleContainerBlock">
290
+ <div class="handleContainer ${classMap(handleContainerClasses)}">
291
+ ${when(this.allowRange, () => this.renderHandle(handleAProps))}
292
+ ${this.renderHandle(handleBProps)}
293
+ </div>
294
+ </div>
295
+ </div>
296
+ </div>`;
297
+ }
298
+ renderTrack() {
299
+ const trackClasses = { 'tickMarks': this.withTickMarks };
300
+ return html `
301
+ <slot name="track">
302
+ <div class="track ${classMap(trackClasses)}"></div>
303
+ </slot>`;
304
+ }
305
+ renderFocusRing(visible) {
306
+ return html `<md-focus-ring .visible=${visible}></md-focus-ring>`;
307
+ }
308
+ renderLabel(value) {
309
+ return html `<div class="label">
310
+ <span class="labelContent" part="label">${value}</span>
311
+ </div>`;
312
+ }
313
+ renderHandle({ id, lesser, showRipple, focusRequested, showFocus, hover, pressed, label }) {
314
+ const onTop = !this.disabled && id === this.onTopId;
315
+ const isOverlapping = !this.disabled && this.handlesOverlapping;
316
+ return html `<div class="handle ${classMap({
317
+ [id]: true,
318
+ lesser,
319
+ hover,
320
+ pressed,
321
+ onTop,
322
+ isOverlapping
323
+ })}">
324
+ <slot name="handle${this.allowRange ? (lesser ? 'Lesser' : 'Greater') : ''}">
325
+ <div class="handleNub"><md-elevation shadow></md-elevation></div>
326
+ ${when(this.withLabel, () => this.renderLabel(label))}
327
+
328
+ </slot>
329
+ ${when(showRipple, () => this.renderRipple(id))}
330
+ ${when(focusRequested, () => this.renderFocusRing(showFocus))}
331
+ </div>`;
332
+ }
333
+ renderInput({ id, lesser, value, label, getRipple }) {
334
+ // when ranged, ensure announcement includes value info.
335
+ const ariaLabelDescriptor = this.allowRange ? ` - ${lesser ? `start` : `end`} handle` : '';
336
+ return html `<input type="range"
337
+ class="${classMap({
338
+ lesser,
339
+ [id]: true
340
+ })}"
341
+ @focus=${this.handleFocus}
342
+ @blur=${this.handleBlur}
343
+ @pointerdown=${this.handleDown}
344
+ @pointerup=${this.handleUp}
345
+ @pointerenter=${this.handleEnter}
346
+ @pointermove=${this.handleMove}
347
+ @pointerleave=${this.handleLeave}
348
+ @input=${this.handleInput}
349
+ @change=${this.handleChange}
350
+ .disabled=${this.disabled}
351
+ .min=${String(this.min)}
352
+ .max=${String(this.max)}
353
+ .step=${String(this.step)}
354
+ .value=${String(value)}
355
+ .tabIndex=${lesser ? 1 : 0}
356
+ aria-label=${`${this.ariaLabel}${ariaLabelDescriptor}` || nothing}
357
+ aria-valuetext=${label}
358
+ ${ripple(getRipple)}>`;
359
+ }
360
+ async toggleRippleHover(ripple, hovering) {
361
+ const rippleEl = await ripple;
362
+ if (!rippleEl) {
363
+ return;
364
+ }
365
+ // TODO(b/269799771): improve slider ripple connection
366
+ if (hovering) {
367
+ rippleEl.handlePointerenter(new PointerEvent('pointerenter', { isPrimary: true, pointerId: 1 }));
368
+ }
369
+ else {
370
+ rippleEl.handlePointerleave(new PointerEvent('pointerleave', { isPrimary: true, pointerId: 1 }));
371
+ }
372
+ }
373
+ isEventOnA({ target }) {
374
+ return target === this.inputA;
375
+ }
376
+ updateFocusVisible(e) {
377
+ const isA = this.isEventOnA(e);
378
+ const showFocus = shouldShowStrongFocus();
379
+ this.focusRingAShowing = showFocus && isA;
380
+ this.focusRingBShowing = showFocus && !isA;
381
+ }
382
+ handleFocus(e) {
383
+ this.updateFocusVisible(e);
384
+ this.updateOnTop(e);
385
+ }
386
+ handleBlur(e) {
387
+ this.focusRingAShowing = false;
388
+ this.focusRingBShowing = false;
389
+ }
390
+ handleDown(e) {
391
+ pointerPress();
392
+ this.isInteracting = true;
393
+ const isA = this.isEventOnA(e);
394
+ const isPrimaryButton = Boolean(e.buttons & 1);
395
+ // Since handle moves to pointer on down and there may not be a move,
396
+ // it needs to be considered hovered..
397
+ this.handleAHover = !this.disabled && isA && Boolean(this.handleA);
398
+ this.handleAPressed = isPrimaryButton && this.handleAHover;
399
+ this.handleBHover = !this.disabled && !isA && Boolean(this.handleB);
400
+ this.handleBPressed = isPrimaryButton && this.handleBHover;
401
+ this.updateFocusVisible(e);
402
+ }
403
+ handleUp(e) {
404
+ this.handleAPressed = this.handleBPressed = false;
405
+ // used to remove animations after interactions...
406
+ this.renderRoot.addEventListener('transitionend', () => {
407
+ this.isInteracting = false;
408
+ }, { once: true });
409
+ }
410
+ /**
411
+ * The move handler tracks handle hovering to facilitate proper ripple
412
+ * behavior on the slider handle. This is needed because user interaction with
413
+ * the native input is leveraged to position the handle. Because the separate
414
+ * displayed handle element has pointer events disabled (to allow interaction
415
+ * with the input) and the input's handle is a pseudo-element, neither can be
416
+ * the ripple's interactive element. Therefore the input is the ripple's
417
+ * interactive element and has a `ripple` directive; however the ripple
418
+ * is gated on the handle being hovered. In addition, because the ripple
419
+ * hover state is being specially handled, it must be triggered independent
420
+ * of the directive. This is done based on the hover state when the
421
+ * slider is updated.
422
+ */
423
+ handleMove(e) {
424
+ this.handleAHover = !this.disabled && inBounds(e, this.handleA);
425
+ this.handleBHover = !this.disabled && inBounds(e, this.handleB);
426
+ }
427
+ handleEnter(e) {
428
+ this.handleMove(e);
429
+ }
430
+ handleLeave() {
431
+ this.handleAHover = false;
432
+ this.handleBHover = false;
433
+ }
434
+ updateOnTop(e) {
435
+ this.onTopId = e.target.classList.contains('a') ? 'a' : 'b';
436
+ }
437
+ handleInput(e) {
438
+ if (this.inputA) {
439
+ this.valueA = this.inputA.valueAsNumber ?? 0;
440
+ }
441
+ this.valueB = this.inputB.valueAsNumber;
442
+ this.updateOnTop(e);
443
+ // update value only on interaction
444
+ const lower = Math.min(this.valueA, this.valueB);
445
+ const upper = Math.max(this.valueA, this.valueB);
446
+ this.value = this.allowRange ? [lower, upper] : this.valueB;
447
+ }
448
+ handleChange(event) {
449
+ redispatchEvent(this, event);
450
+ }
451
+ }
452
+ Slider.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
453
+ /**
454
+ * @nocollapse
455
+ */
456
+ Slider.formAssociated = true;
457
+ __decorate([
458
+ ariaProperty // tslint:disable-line:no-new-decorators
459
+ ,
460
+ property({ type: String, attribute: 'data-aria-label', noAccessor: true }),
461
+ __metadata("design:type", String)
462
+ ], Slider.prototype, "ariaLabel", void 0);
463
+ __decorate([
464
+ property({ type: Boolean, reflect: true }),
465
+ __metadata("design:type", Object)
466
+ ], Slider.prototype, "disabled", void 0);
467
+ __decorate([
468
+ property({ type: Number }),
469
+ __metadata("design:type", Object)
470
+ ], Slider.prototype, "min", void 0);
471
+ __decorate([
472
+ property({ type: Number }),
473
+ __metadata("design:type", Object)
474
+ ], Slider.prototype, "max", void 0);
475
+ __decorate([
476
+ property({ converter: valueConverter }),
477
+ __metadata("design:type", Object)
478
+ ], Slider.prototype, "value", void 0);
479
+ __decorate([
480
+ property({ type: String, converter: tupleConverter }),
481
+ __metadata("design:type", Object)
482
+ ], Slider.prototype, "valueLabel", void 0);
483
+ __decorate([
484
+ property({ type: Number }),
485
+ __metadata("design:type", Object)
486
+ ], Slider.prototype, "step", void 0);
487
+ __decorate([
488
+ property({ type: Boolean }),
489
+ __metadata("design:type", Object)
490
+ ], Slider.prototype, "withTickMarks", void 0);
491
+ __decorate([
492
+ property({ type: Boolean }),
493
+ __metadata("design:type", Object)
494
+ ], Slider.prototype, "withLabel", void 0);
495
+ __decorate([
496
+ property({ type: String, reflect: true, converter: stringConverter }),
497
+ __metadata("design:type", Object)
498
+ ], Slider.prototype, "name", void 0);
499
+ __decorate([
500
+ query('input.a'),
501
+ __metadata("design:type", HTMLInputElement)
502
+ ], Slider.prototype, "inputA", void 0);
503
+ __decorate([
504
+ query('.handle.a'),
505
+ __metadata("design:type", HTMLDivElement)
506
+ ], Slider.prototype, "handleA", void 0);
507
+ __decorate([
508
+ queryAsync('md-ripple.a'),
509
+ __metadata("design:type", Promise)
510
+ ], Slider.prototype, "rippleA", void 0);
511
+ __decorate([
512
+ query('input.b'),
513
+ __metadata("design:type", HTMLInputElement)
514
+ ], Slider.prototype, "inputB", void 0);
515
+ __decorate([
516
+ query('.handle.b'),
517
+ __metadata("design:type", HTMLDivElement)
518
+ ], Slider.prototype, "handleB", void 0);
519
+ __decorate([
520
+ queryAsync('md-ripple.b'),
521
+ __metadata("design:type", Promise)
522
+ ], Slider.prototype, "rippleB", void 0);
523
+ __decorate([
524
+ state(),
525
+ __metadata("design:type", Object)
526
+ ], Slider.prototype, "valueA", void 0);
527
+ __decorate([
528
+ state(),
529
+ __metadata("design:type", Object)
530
+ ], Slider.prototype, "valueB", void 0);
531
+ __decorate([
532
+ state(),
533
+ __metadata("design:type", Object)
534
+ ], Slider.prototype, "focusRingAShowing", void 0);
535
+ __decorate([
536
+ state(),
537
+ __metadata("design:type", Object)
538
+ ], Slider.prototype, "focusRingBShowing", void 0);
539
+ __decorate([
540
+ state(),
541
+ __metadata("design:type", Object)
542
+ ], Slider.prototype, "rippleAShowing", void 0);
543
+ __decorate([
544
+ state(),
545
+ __metadata("design:type", Object)
546
+ ], Slider.prototype, "rippleBShowing", void 0);
547
+ __decorate([
548
+ state(),
549
+ __metadata("design:type", Object)
550
+ ], Slider.prototype, "handleAHover", void 0);
551
+ __decorate([
552
+ state(),
553
+ __metadata("design:type", Object)
554
+ ], Slider.prototype, "handleBHover", void 0);
555
+ __decorate([
556
+ state(),
557
+ __metadata("design:type", Object)
558
+ ], Slider.prototype, "handleAPressed", void 0);
559
+ __decorate([
560
+ state(),
561
+ __metadata("design:type", Object)
562
+ ], Slider.prototype, "handleBPressed", void 0);
563
+ __decorate([
564
+ state(),
565
+ __metadata("design:type", Object)
566
+ ], Slider.prototype, "onTopId", void 0);
567
+ __decorate([
568
+ state(),
569
+ __metadata("design:type", Object)
570
+ ], Slider.prototype, "handlesOverlapping", void 0);
571
+ __decorate([
572
+ state(),
573
+ __metadata("design:type", Object)
574
+ ], Slider.prototype, "isInteracting", void 0);
575
+ //# sourceMappingURL=slider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.js","sourceRoot":"","sources":["slider.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport '../../elevation/elevation.js';\nimport '../../focus/focus-ring.js';\nimport '../../ripple/ripple.js';\n\nimport {html, LitElement, nothing, PropertyValues} from 'lit';\nimport {property, query, queryAsync, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {styleMap} from 'lit/directives/style-map.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 {stringConverter} from '../../controller/string-converter.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\n\n\n// This is required for decorators.\n// tslint:disable:no-new-decorators\n\n// Disable warning for classMap with destructuring\n// tslint:disable:quoted-properties-on-dictionary\n\nfunction inBounds({x, y}: PointerEvent, element?: HTMLElement|null) {\n if (!element) {\n return false;\n }\n const {top, left, bottom, right} = element.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n}\n\n// parse values like: foo or foo,bar\nfunction tupleConverter(attr: string|null) {\n const [, v, e] =\n attr?.match(/\\s*\\[?\\s*([^,]+)(?:(?:\\s*$)|(?:\\s*,\\s*(.*)\\s*))/) ?? [];\n return e !== undefined ? [v, e] : v;\n}\n\nfunction toNumber(value: string) {\n return Number(value) || 0;\n}\n\nfunction tupleAsString(value: unknown|[unknown, unknown]) {\n return Array.isArray(value) ? value.join() : String(value ?? '');\n}\n\nfunction valueConverter(attr: string|null) {\n const value = tupleConverter(attr);\n return Array.isArray(value) ? value.map(i => toNumber(i)) : toNumber(value);\n}\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction isOverlapping(elA: Element, elB: Element) {\n if (!(elA && elB)) {\n return false;\n }\n const a = elA.getBoundingClientRect();\n const b = elB.getBoundingClientRect();\n return !(\n a.top > b.bottom || a.right < b.left || a.bottom < b.top ||\n a.left > b.right);\n}\n\n/**\n * Slider component.\n */\nexport class Slider extends LitElement {\n static override shadowRootOptions:\n ShadowRootInit = {...LitElement.shadowRootOptions, delegatesFocus: true};\n\n /**\n * @nocollapse\n */\n static formAssociated = true;\n\n @ariaProperty // tslint:disable-line:no-new-decorators\n @property({type: String, attribute: 'data-aria-label', noAccessor: true})\n override ariaLabel!: string;\n\n /**\n * Whether or not the slider is disabled.\n */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /**\n * The slider minimum value\n */\n @property({type: Number}) min = 0;\n\n /**\n * The slider maximum value\n */\n @property({type: Number}) max = 10;\n\n /**\n * The slider value, can be a single number, or an array tuple indicating\n * a start and end value.\n */\n @property({converter: valueConverter}) value: number|[number, number] = 0;\n\n /**\n * An optinoal label for the slider's value; if not set, the label is the\n * value itself. This can be a string or string tuple when start and end\n * values are used.\n */\n @property({type: String, converter: tupleConverter})\n valueLabel?: string|[string, string]|undefined;\n\n /**\n * The step between values.\n */\n @property({type: Number}) step = 1;\n\n /**\n * Whether or not to show tick marks.\n */\n @property({type: Boolean}) withTickMarks = false;\n\n /**\n * Whether or not to show a value label when activated.\n */\n @property({type: Boolean}) withLabel = false;\n\n /**\n * The HTML name to use in form submission.\n */\n @property({type: String, reflect: true, converter: stringConverter})\n name = '';\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\n /**\n * Read only computed value representing the fraction between 0 and 1\n * respresenting the value's position between min and max. This is a\n * single fraction or a tuple if the value specifies start and end values.\n */\n get valueAsFraction() {\n const {lowerFraction, upperFraction} = this.getMetrics();\n return this.allowRange ? [lowerFraction, upperFraction] : upperFraction;\n }\n\n protected getMetrics() {\n const step = Math.max(this.step, 1);\n const range = Math.max(this.max - this.min, step);\n const lower = Math.min(this.valueA, this.valueB);\n const upper = Math.max(this.valueA, this.valueB);\n const lowerFraction = (lower - this.min) / range;\n const upperFraction = (upper - this.min) / range;\n return {\n step,\n range,\n lower,\n upper,\n lowerFraction,\n upperFraction,\n };\n }\n\n @query('input.a') protected readonly inputA!: HTMLInputElement;\n @query('.handle.a') protected readonly handleA!: HTMLDivElement;\n @queryAsync('md-ripple.a')\n protected readonly rippleA!: Promise<MdRipple|null>;\n\n @query('input.b') protected readonly inputB!: HTMLInputElement;\n @query('.handle.b') protected readonly handleB!: HTMLDivElement;\n @queryAsync('md-ripple.b')\n protected readonly rippleB!: Promise<MdRipple|null>;\n\n @state() protected valueA = 0;\n @state() protected valueB = 0;\n\n @state() private focusRingAShowing = false;\n @state() private focusRingBShowing = false;\n // allows for lazy rendering of the focus ring by latchin to true when the\n // focus ring should be rendered.\n private focusRingARequested = false;\n private focusRingBRequested = false;\n\n @state() private rippleAShowing = false;\n @state() private rippleBShowing = false;\n\n // handle hover/pressed states are set manually since the handle\n // does not receive pointer events so that the native inputs are\n // interaction targets.\n @state() private handleAHover = false;\n @state() private handleBHover = false;\n @state() private handleAPressed = false;\n @state() private handleBPressed = false;\n\n @state() private onTopId = 'b';\n @state() private handlesOverlapping = false;\n\n @state() private isInteracting = false;\n\n constructor() {\n super();\n this.addController(new FormController(this));\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event)) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.inputB);\n });\n }\n\n override focus() {\n this.inputB?.focus();\n }\n\n get valueAsString() {\n return tupleAsString(this.value);\n }\n\n // value coerced to a string\n [getFormValue]() {\n return this.valueAsString;\n }\n\n // If range should be allowed (detected via value format).\n private allowRange = false;\n\n // indicates input values are crossed over each other from initial rendering.\n private isFlipped() {\n return this.valueA > this.valueB;\n }\n\n protected override willUpdate(changed: PropertyValues) {\n if (changed.has('value') || changed.has('min') || changed.has('max') ||\n changed.has('step')) {\n this.allowRange = Array.isArray(this.value);\n const step = Math.max(this.step, 1);\n let lower =\n this.allowRange ? (this.value as [number, number])[0] : this.min;\n lower = clamp(lower - (lower % step), this.min, this.max);\n let upper = this.allowRange ? (this.value as [number, number])[1] :\n this.value as number;\n upper = clamp(upper - (upper % step), this.min, this.max);\n const isFlipped = this.isFlipped() && this.allowRange;\n this.valueA = isFlipped ? upper : lower;\n this.valueB = isFlipped ? lower : upper;\n }\n\n // manually handle ripple hover state since the handle is pointer events\n // none.\n if (changed.get('handleAHover') !== undefined) {\n this.rippleAShowing = true;\n this.toggleRippleHover(this.rippleA, this.handleAHover);\n } else if (changed.get('handleBHover') !== undefined) {\n this.rippleBShowing = true;\n this.toggleRippleHover(this.rippleB, this.handleBHover);\n }\n\n // facilitates lazy rendering of the focus ring.\n this.focusRingARequested ||= this.focusRingAShowing;\n this.focusRingBRequested ||= this.focusRingBShowing;\n }\n\n protected override async updated(changed: PropertyValues) {\n if (changed.has('value') || changed.has('valueA') ||\n changed.has('valueB')) {\n await this.updateComplete;\n this.handlesOverlapping = isOverlapping(this.handleA, this.handleB);\n }\n }\n\n protected override render() {\n const {step, range, lowerFraction, upperFraction} = this.getMetrics();\n const isFlipped = this.isFlipped();\n const containerStyles = {\n // for clipping inputs and active track.\n '--lowerFraction': String(lowerFraction),\n '--upperFraction': String(upperFraction),\n // for generating tick marks\n '--tickCount': String(range / step)\n };\n const containerClasses = {\n interacting: this.isInteracting,\n ranged: this.allowRange\n };\n\n // optional label values to show in place of the value.\n const labelA = String(this.valueLabel?.[isFlipped ? 1 : 0] ?? this.valueA);\n const labelB = String(\n (this.allowRange ? this.valueLabel?.[isFlipped ? 0 : 1] :\n this.valueLabel) ??\n this.valueB);\n\n const inputAProps = {\n id: 'a',\n lesser: !isFlipped,\n value: this.valueA,\n label: labelA,\n getRipple: this.getRippleA\n };\n\n const inputBProps = {\n id: 'b',\n lesser: isFlipped,\n value: this.valueB,\n label: labelB,\n getRipple: this.getRippleB\n };\n\n const handleAProps = {\n id: 'a',\n lesser: !isFlipped,\n showRipple: this.rippleAShowing,\n focusRequested: this.focusRingARequested,\n showFocus: this.focusRingAShowing,\n hover: this.handleAHover,\n pressed: this.handleAPressed,\n label: labelA\n };\n\n const handleBProps = {\n id: 'b',\n lesser: isFlipped,\n showRipple: this.rippleBShowing,\n focusRequested: this.focusRingBRequested,\n showFocus: this.focusRingBShowing,\n hover: this.handleBHover,\n pressed: this.handleBPressed,\n label: labelB\n };\n\n const handleContainerClasses = {\n hover: this.handleAHover || this.handleBHover\n };\n\n return html`\n <div\n class=\"container ${classMap(containerClasses)}\"\n style=${styleMap(containerStyles)}\n >\n ${when(this.allowRange, () => this.renderInput(inputAProps))}\n ${this.renderInput(inputBProps)}\n ${this.renderTrack()}\n <div class=\"handleContainerPadded\">\n <div class=\"handleContainerBlock\">\n <div class=\"handleContainer ${classMap(handleContainerClasses)}\">\n ${when(this.allowRange, () => this.renderHandle(handleAProps))}\n ${this.renderHandle(handleBProps)}\n </div>\n </div>\n </div>\n </div>`;\n }\n\n protected renderTrack() {\n const trackClasses = {'tickMarks': this.withTickMarks};\n return html`\n <slot name=\"track\">\n <div class=\"track ${classMap(trackClasses)}\"></div>\n </slot>`;\n }\n\n protected renderFocusRing(visible: boolean) {\n return html`<md-focus-ring .visible=${visible}></md-focus-ring>`;\n }\n\n protected renderLabel(value: string) {\n return html`<div class=\"label\">\n <span class=\"labelContent\" part=\"label\">${value}</span>\n </div>`;\n }\n\n protected renderHandle({\n id,\n lesser,\n showRipple,\n focusRequested,\n showFocus,\n hover,\n pressed,\n label\n }: {\n id: string,\n lesser: boolean,\n focusRequested: boolean,\n showRipple: boolean,\n showFocus: boolean,\n hover: boolean,\n pressed: boolean,\n label: string\n }) {\n const onTop = !this.disabled && id === this.onTopId;\n const isOverlapping = !this.disabled && this.handlesOverlapping;\n return html`<div class=\"handle ${classMap({\n [id]: true,\n lesser,\n hover,\n pressed,\n onTop,\n isOverlapping\n })}\">\n <slot name=\"handle${\n this.allowRange ? (lesser ? 'Lesser' : 'Greater') : ''}\">\n <div class=\"handleNub\"><md-elevation shadow></md-elevation></div>\n ${when(this.withLabel, () => this.renderLabel(label))}\n\n </slot>\n ${when(showRipple, () => this.renderRipple(id))}\n ${when(focusRequested, () => this.renderFocusRing(showFocus))}\n </div>`;\n }\n\n protected renderInput({id, lesser, value, label, getRipple}: {\n id: string,\n lesser: boolean,\n value: number,\n label: string,\n getRipple: () => Promise<MdRipple|null>| null\n }) {\n // when ranged, ensure announcement includes value info.\n const ariaLabelDescriptor =\n this.allowRange ? ` - ${lesser ? `start` : `end`} handle` : '';\n return html`<input type=\"range\"\n class=\"${classMap({\n lesser,\n [id]: true\n })}\"\n @focus=${this.handleFocus}\n @blur=${this.handleBlur}\n @pointerdown=${this.handleDown}\n @pointerup=${this.handleUp}\n @pointerenter=${this.handleEnter}\n @pointermove=${this.handleMove}\n @pointerleave=${this.handleLeave}\n @input=${this.handleInput}\n @change=${this.handleChange}\n .disabled=${this.disabled}\n .min=${String(this.min)}\n .max=${String(this.max)}\n .step=${String(this.step)}\n .value=${String(value)}\n .tabIndex=${lesser ? 1 : 0}\n aria-label=${`${this.ariaLabel}${ariaLabelDescriptor}` || nothing}\n aria-valuetext=${label}\n ${ripple(getRipple)}>`;\n }\n\n protected renderRipple = (id: string) => html`<md-ripple class=${\n id} ?disabled=${this.disabled} unbounded></md-ripple>`;\n\n private readonly getRippleA = () => { // bind to this\n if (!this.handleAHover) {\n return null;\n }\n this.rippleAShowing = true;\n return this.rippleA;\n };\n\n\n private readonly getRippleB = () => { // bind to this\n if (!this.handleBHover) {\n return null;\n }\n this.rippleBShowing = true;\n return this.rippleB;\n };\n\n private async toggleRippleHover(\n ripple: Promise<MdRipple|null>, hovering: boolean) {\n const rippleEl = await ripple;\n if (!rippleEl) {\n return;\n }\n // TODO(b/269799771): improve slider ripple connection\n if (hovering) {\n rippleEl.handlePointerenter(\n new PointerEvent('pointerenter', {isPrimary: true, pointerId: 1}));\n } else {\n rippleEl.handlePointerleave(\n new PointerEvent('pointerleave', {isPrimary: true, pointerId: 1}));\n }\n }\n\n protected isEventOnA({target}: Event) {\n return target === this.inputA;\n }\n\n protected updateFocusVisible(e: Event) {\n const isA = this.isEventOnA(e);\n const showFocus = shouldShowStrongFocus();\n this.focusRingAShowing = showFocus && isA;\n this.focusRingBShowing = showFocus && !isA;\n }\n\n protected handleFocus(e: Event) {\n this.updateFocusVisible(e);\n this.updateOnTop(e);\n }\n\n protected handleBlur(e: Event) {\n this.focusRingAShowing = false;\n this.focusRingBShowing = false;\n }\n\n protected handleDown(e: PointerEvent) {\n pointerPress();\n this.isInteracting = true;\n const isA = this.isEventOnA(e);\n const isPrimaryButton = Boolean(e.buttons & 1);\n // Since handle moves to pointer on down and there may not be a move,\n // it needs to be considered hovered..\n this.handleAHover = !this.disabled && isA && Boolean(this.handleA);\n this.handleAPressed = isPrimaryButton && this.handleAHover;\n this.handleBHover = !this.disabled && !isA && Boolean(this.handleB);\n this.handleBPressed = isPrimaryButton && this.handleBHover;\n this.updateFocusVisible(e);\n }\n\n protected handleUp(e: PointerEvent) {\n this.handleAPressed = this.handleBPressed = false;\n // used to remove animations after interactions...\n this.renderRoot.addEventListener('transitionend', () => {\n this.isInteracting = false;\n }, {once: true});\n }\n\n /**\n * The move handler tracks handle hovering to facilitate proper ripple\n * behavior on the slider handle. This is needed because user interaction with\n * the native input is leveraged to position the handle. Because the separate\n * displayed handle element has pointer events disabled (to allow interaction\n * with the input) and the input's handle is a pseudo-element, neither can be\n * the ripple's interactive element. Therefore the input is the ripple's\n * interactive element and has a `ripple` directive; however the ripple\n * is gated on the handle being hovered. In addition, because the ripple\n * hover state is being specially handled, it must be triggered independent\n * of the directive. This is done based on the hover state when the\n * slider is updated.\n */\n protected handleMove(e: PointerEvent) {\n this.handleAHover = !this.disabled && inBounds(e, this.handleA);\n this.handleBHover = !this.disabled && inBounds(e, this.handleB);\n }\n\n protected handleEnter(e: PointerEvent) {\n this.handleMove(e);\n }\n\n protected handleLeave() {\n this.handleAHover = false;\n this.handleBHover = false;\n }\n\n\n private updateOnTop(e: Event) {\n this.onTopId = (e.target as Element).classList.contains('a') ? 'a' : 'b';\n }\n\n protected handleInput(e: InputEvent) {\n if (this.inputA) {\n this.valueA = this.inputA.valueAsNumber ?? 0;\n }\n this.valueB = this.inputB.valueAsNumber;\n this.updateOnTop(e);\n // update value only on interaction\n const lower = Math.min(this.valueA, this.valueB);\n const upper = Math.max(this.valueA, this.valueB);\n this.value = this.allowRange ? [lower, upper] : this.valueB;\n }\n\n protected handleChange(event: Event) {\n redispatchEvent(this, event);\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Slider } from './lib/slider.js';
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ 'md-slider': MdSlider;
10
+ }
11
+ }
12
+ /**
13
+ * @summary Sliders allow users to view and select a value (or range) along
14
+ * a track.
15
+ *
16
+ * @description
17
+ * Changes made with sliders are immediate, allowing the user to make slider
18
+ * adjustments while determining a selection. Sliders shouldn’t be used to
19
+ * adjust settings with any delay in providing user feedback. Sliders reflect
20
+ * the current state of the settings they control.
21
+ *
22
+ * __Example usages:__
23
+ * - Sliders are ideal for adjusting settings such as volume and brightness, or
24
+ * for applying image filters.
25
+ */
26
+ export declare class MdSlider extends Slider {
27
+ static styles: import("lit").CSSResult[];
28
+ }