@material/web 1.0.1 → 1.0.2-nightly.6a1fb38.0

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 (308) hide show
  1. package/all.d.ts +2 -0
  2. package/all.js +2 -0
  3. package/all.js.map +1 -1
  4. package/button/elevated-button.js +5 -1
  5. package/button/elevated-button.js.map +1 -1
  6. package/button/internal/_elevation.scss +32 -32
  7. package/button/internal/_icon.scss +22 -23
  8. package/button/internal/_outlined-button.scss +21 -19
  9. package/button/internal/_shared.scss +84 -77
  10. package/button/internal/_touch-target.scss +4 -0
  11. package/button/internal/button.d.ts +7 -11
  12. package/button/internal/button.js +52 -38
  13. package/button/internal/button.js.map +1 -1
  14. package/button/internal/elevated-button.d.ts +1 -1
  15. package/button/internal/elevated-button.js +1 -1
  16. package/button/internal/elevated-button.js.map +1 -1
  17. package/button/internal/filled-button.d.ts +1 -1
  18. package/button/internal/filled-button.js +1 -1
  19. package/button/internal/filled-button.js.map +1 -1
  20. package/button/internal/filled-tonal-button.d.ts +1 -1
  21. package/button/internal/filled-tonal-button.js +1 -1
  22. package/button/internal/filled-tonal-button.js.map +1 -1
  23. package/button/internal/outlined-button.d.ts +1 -1
  24. package/button/internal/outlined-button.js +2 -2
  25. package/button/internal/outlined-button.js.map +1 -1
  26. package/button/internal/outlined-styles.css.js +1 -1
  27. package/button/internal/outlined-styles.css.js.map +1 -1
  28. package/button/internal/shared-elevation-styles.css.js +1 -1
  29. package/button/internal/shared-elevation-styles.css.js.map +1 -1
  30. package/button/internal/shared-styles.css.js +1 -1
  31. package/button/internal/shared-styles.css.js.map +1 -1
  32. package/checkbox/internal/checkbox.d.ts +16 -23
  33. package/checkbox/internal/checkbox.js +38 -52
  34. package/checkbox/internal/checkbox.js.map +1 -1
  35. package/chips/filter-chip.js +5 -1
  36. package/chips/filter-chip.js.map +1 -1
  37. package/chips/harness.js.map +1 -1
  38. package/chips/input-chip.js +6 -1
  39. package/chips/input-chip.js.map +1 -1
  40. package/chips/internal/assist-chip.js +8 -4
  41. package/chips/internal/assist-chip.js.map +1 -1
  42. package/chips/internal/chip-set.js +6 -4
  43. package/chips/internal/chip-set.js.map +1 -1
  44. package/chips/internal/chip.d.ts +3 -0
  45. package/chips/internal/chip.js +7 -5
  46. package/chips/internal/chip.js.map +1 -1
  47. package/chips/internal/filter-chip.d.ts +2 -0
  48. package/chips/internal/filter-chip.js +11 -5
  49. package/chips/internal/filter-chip.js.map +1 -1
  50. package/chips/internal/input-chip.d.ts +2 -0
  51. package/chips/internal/input-chip.js +10 -4
  52. package/chips/internal/input-chip.js.map +1 -1
  53. package/chips/internal/multi-action-chip.js.map +1 -1
  54. package/chips/internal/trailing-icons.d.ts +1 -1
  55. package/chips/internal/trailing-icons.js +6 -5
  56. package/chips/internal/trailing-icons.js.map +1 -1
  57. package/common.d.ts +2 -0
  58. package/common.js +2 -0
  59. package/common.js.map +1 -1
  60. package/dialog/harness.js +1 -2
  61. package/dialog/harness.js.map +1 -1
  62. package/dialog/internal/_dialog.scss +1 -1
  63. package/dialog/internal/animations.js +14 -12
  64. package/dialog/internal/animations.js.map +1 -1
  65. package/dialog/internal/dialog-styles.css.js +1 -1
  66. package/dialog/internal/dialog-styles.css.js.map +1 -1
  67. package/dialog/internal/dialog.d.ts +6 -6
  68. package/dialog/internal/dialog.js +24 -24
  69. package/dialog/internal/dialog.js.map +1 -1
  70. package/fab/harness.js.map +1 -1
  71. package/fab/internal/fab.js.map +1 -1
  72. package/fab/internal/shared.js +10 -11
  73. package/fab/internal/shared.js.map +1 -1
  74. package/field/harness.js.map +1 -1
  75. package/field/internal/_content.scss +185 -174
  76. package/field/internal/_filled-field.scss +147 -136
  77. package/field/internal/_label.scss +83 -72
  78. package/field/internal/_outlined-field.scss +276 -262
  79. package/field/internal/_supporting-text.scss +53 -42
  80. package/field/internal/field.js +26 -22
  81. package/field/internal/field.js.map +1 -1
  82. package/field/internal/filled-styles.css.js +1 -1
  83. package/field/internal/filled-styles.css.js.map +1 -1
  84. package/field/internal/outlined-styles.css.js +1 -1
  85. package/field/internal/outlined-styles.css.js.map +1 -1
  86. package/field/internal/shared-styles.css.js +1 -1
  87. package/field/internal/shared-styles.css.js.map +1 -1
  88. package/focus/internal/focus-ring.d.ts +2 -0
  89. package/focus/internal/focus-ring.js +3 -3
  90. package/focus/internal/focus-ring.js.map +1 -1
  91. package/icon/internal/_icon.scss +7 -4
  92. package/icon/internal/icon-styles.css.js +1 -1
  93. package/icon/internal/icon-styles.css.js.map +1 -1
  94. package/iconbutton/internal/icon-button.d.ts +9 -4
  95. package/iconbutton/internal/icon-button.js +35 -22
  96. package/iconbutton/internal/icon-button.js.map +1 -1
  97. package/internal/aria/aria.d.ts +4 -26
  98. package/internal/aria/aria.js +10 -28
  99. package/internal/aria/aria.js.map +1 -1
  100. package/internal/aria/delegate.js +2 -2
  101. package/internal/aria/delegate.js.map +1 -1
  102. package/internal/controller/attachable-controller.js +3 -5
  103. package/internal/controller/attachable-controller.js.map +1 -1
  104. package/internal/controller/form-submitter.d.ts +3 -5
  105. package/internal/controller/form-submitter.js +5 -7
  106. package/internal/controller/form-submitter.js.map +1 -1
  107. package/internal/controller/is-rtl.js +2 -2
  108. package/internal/controller/is-rtl.js.map +1 -1
  109. package/internal/controller/string-converter.js +1 -1
  110. package/internal/controller/string-converter.js.map +1 -1
  111. package/internal/motion/animation.js.map +1 -1
  112. package/labs/behaviors/element-internals.d.ts +45 -0
  113. package/labs/behaviors/element-internals.js +50 -0
  114. package/labs/behaviors/element-internals.js.map +1 -0
  115. package/labs/behaviors/focusable.d.ts +39 -0
  116. package/labs/behaviors/focusable.js +82 -0
  117. package/labs/behaviors/focusable.js.map +1 -0
  118. package/labs/behaviors/form-associated.d.ts +199 -0
  119. package/labs/behaviors/form-associated.js +155 -0
  120. package/labs/behaviors/form-associated.js.map +1 -0
  121. package/labs/behaviors/mixin.d.ts +54 -0
  122. package/labs/behaviors/mixin.js +7 -0
  123. package/labs/behaviors/mixin.js.map +1 -0
  124. package/labs/card/_elevated-card.scss +6 -0
  125. package/labs/card/_filled-card.scss +6 -0
  126. package/labs/card/_outlined-card.scss +6 -0
  127. package/labs/card/elevated-card.d.ts +18 -0
  128. package/labs/card/elevated-card.js +21 -0
  129. package/labs/card/elevated-card.js.map +1 -0
  130. package/labs/card/filled-card.d.ts +18 -0
  131. package/labs/card/filled-card.js +21 -0
  132. package/labs/card/filled-card.js.map +1 -0
  133. package/labs/card/internal/_elevated-card.scss +35 -0
  134. package/labs/card/internal/_filled-card.scss +35 -0
  135. package/labs/card/internal/_outlined-card.scss +39 -0
  136. package/labs/card/internal/_shared.scss +40 -0
  137. package/labs/card/internal/card.d.ts +13 -0
  138. package/labs/card/internal/card.js +20 -0
  139. package/labs/card/internal/card.js.map +1 -0
  140. package/labs/card/internal/elevated-styles.css.js +9 -0
  141. package/labs/card/internal/elevated-styles.css.js.map +1 -0
  142. package/labs/card/internal/elevated-styles.scss +10 -0
  143. package/labs/card/internal/filled-styles.css.js +9 -0
  144. package/labs/card/internal/filled-styles.css.js.map +1 -0
  145. package/labs/card/internal/filled-styles.scss +10 -0
  146. package/labs/card/internal/outlined-styles.css.js +9 -0
  147. package/labs/card/internal/outlined-styles.css.js.map +1 -0
  148. package/labs/card/internal/outlined-styles.scss +10 -0
  149. package/labs/card/internal/shared-styles.css.js +9 -0
  150. package/labs/card/internal/shared-styles.css.js.map +1 -0
  151. package/labs/card/internal/shared-styles.scss +10 -0
  152. package/labs/card/outlined-card.d.ts +18 -0
  153. package/labs/card/outlined-card.js +21 -0
  154. package/labs/card/outlined-card.js.map +1 -0
  155. package/labs/item/internal/item.js +8 -8
  156. package/labs/item/internal/item.js.map +1 -1
  157. package/labs/navigationbar/internal/constants.js.map +1 -1
  158. package/labs/navigationbar/internal/navigation-bar.d.ts +3 -0
  159. package/labs/navigationbar/internal/navigation-bar.js +18 -11
  160. package/labs/navigationbar/internal/navigation-bar.js.map +1 -1
  161. package/labs/navigationdrawer/internal/navigation-drawer-modal.d.ts +3 -0
  162. package/labs/navigationdrawer/internal/navigation-drawer-modal.js +10 -3
  163. package/labs/navigationdrawer/internal/navigation-drawer-modal.js.map +1 -1
  164. package/labs/navigationdrawer/internal/navigation-drawer.d.ts +3 -0
  165. package/labs/navigationdrawer/internal/navigation-drawer.js +8 -1
  166. package/labs/navigationdrawer/internal/navigation-drawer.js.map +1 -1
  167. package/labs/navigationtab/harness.js.map +1 -1
  168. package/labs/navigationtab/internal/navigation-tab.d.ts +6 -0
  169. package/labs/navigationtab/internal/navigation-tab.js +43 -27
  170. package/labs/navigationtab/internal/navigation-tab.js.map +1 -1
  171. package/labs/navigationtab/internal/state.js.map +1 -1
  172. package/labs/segmentedbutton/internal/segmented-button.d.ts +3 -0
  173. package/labs/segmentedbutton/internal/segmented-button.js +26 -12
  174. package/labs/segmentedbutton/internal/segmented-button.js.map +1 -1
  175. package/labs/segmentedbuttonset/internal/segmented-button-set.d.ts +5 -0
  176. package/labs/segmentedbuttonset/internal/segmented-button-set.js +14 -9
  177. package/labs/segmentedbuttonset/internal/segmented-button-set.js.map +1 -1
  178. package/list/harness.d.ts +1 -1
  179. package/list/harness.js.map +1 -1
  180. package/list/internal/list-controller.d.ts +1 -1
  181. package/list/internal/list-controller.js +7 -3
  182. package/list/internal/list-controller.js.map +1 -1
  183. package/list/internal/list-navigation-helpers.js.map +1 -1
  184. package/list/internal/list.d.ts +2 -2
  185. package/list/internal/list.js +8 -6
  186. package/list/internal/list.js.map +1 -1
  187. package/list/internal/listitem/harness.d.ts +1 -1
  188. package/list/internal/listitem/harness.js.map +1 -1
  189. package/list/internal/listitem/list-item.d.ts +3 -2
  190. package/list/internal/listitem/list-item.js +19 -20
  191. package/list/internal/listitem/list-item.js.map +1 -1
  192. package/list/list-item.d.ts +4 -12
  193. package/list/list-item.js +4 -12
  194. package/list/list-item.js.map +1 -1
  195. package/menu/harness.js.map +1 -1
  196. package/menu/internal/_menu.scss +12 -1
  197. package/menu/internal/controllers/menuItemController.js +9 -4
  198. package/menu/internal/controllers/menuItemController.js.map +1 -1
  199. package/menu/internal/controllers/shared.d.ts +9 -1
  200. package/menu/internal/controllers/shared.js +4 -4
  201. package/menu/internal/controllers/shared.js.map +1 -1
  202. package/menu/internal/controllers/surfacePositionController.d.ts +15 -2
  203. package/menu/internal/controllers/surfacePositionController.js +124 -54
  204. package/menu/internal/controllers/surfacePositionController.js.map +1 -1
  205. package/menu/internal/controllers/typeaheadController.js +19 -14
  206. package/menu/internal/controllers/typeaheadController.js.map +1 -1
  207. package/menu/internal/menu-styles.css.js +1 -1
  208. package/menu/internal/menu-styles.css.js.map +1 -1
  209. package/menu/internal/menu.d.ts +43 -12
  210. package/menu/internal/menu.js +124 -57
  211. package/menu/internal/menu.js.map +1 -1
  212. package/menu/internal/menuitem/harness.js.map +1 -1
  213. package/menu/internal/menuitem/menu-item.d.ts +3 -2
  214. package/menu/internal/menuitem/menu-item.js +18 -19
  215. package/menu/internal/menuitem/menu-item.js.map +1 -1
  216. package/menu/internal/submenu/sub-menu.d.ts +8 -8
  217. package/menu/internal/submenu/sub-menu.js +31 -22
  218. package/menu/internal/submenu/sub-menu.js.map +1 -1
  219. package/menu/internal/types.js.map +1 -1
  220. package/package.json +1 -1
  221. package/progress/internal/_circular-progress.scss +2 -2
  222. package/progress/internal/_linear-progress.scss +1 -1
  223. package/progress/internal/circular-progress-styles.css.js +1 -1
  224. package/progress/internal/circular-progress-styles.css.js.map +1 -1
  225. package/progress/internal/circular-progress.js +11 -10
  226. package/progress/internal/circular-progress.js.map +1 -1
  227. package/progress/internal/linear-progress-styles.css.js +1 -1
  228. package/progress/internal/linear-progress-styles.css.js.map +1 -1
  229. package/progress/internal/linear-progress.d.ts +1 -1
  230. package/progress/internal/linear-progress.js +3 -3
  231. package/progress/internal/linear-progress.js.map +1 -1
  232. package/progress/internal/progress.js +4 -2
  233. package/progress/internal/progress.js.map +1 -1
  234. package/radio/internal/radio.d.ts +11 -27
  235. package/radio/internal/radio.js +30 -54
  236. package/radio/internal/radio.js.map +1 -1
  237. package/radio/internal/single-selection-controller.js +1 -1
  238. package/radio/internal/single-selection-controller.js.map +1 -1
  239. package/ripple/internal/ripple.js +14 -9
  240. package/ripple/internal/ripple.js.map +1 -1
  241. package/select/filled-select.js +1 -2
  242. package/select/filled-select.js.map +1 -1
  243. package/select/harness.js +1 -1
  244. package/select/harness.js.map +1 -1
  245. package/select/internal/select.d.ts +25 -34
  246. package/select/internal/select.js +101 -91
  247. package/select/internal/select.js.map +1 -1
  248. package/select/internal/selectoption/select-option.d.ts +8 -6
  249. package/select/internal/selectoption/select-option.js +23 -22
  250. package/select/internal/selectoption/select-option.js.map +1 -1
  251. package/select/internal/selectoption/selectOptionController.js +1 -1
  252. package/select/internal/selectoption/selectOptionController.js.map +1 -1
  253. package/select/outlined-select.js +1 -2
  254. package/select/outlined-select.js.map +1 -1
  255. package/slider/harness.js +5 -5
  256. package/slider/harness.js.map +1 -1
  257. package/slider/internal/slider.d.ts +16 -25
  258. package/slider/internal/slider.js +110 -114
  259. package/slider/internal/slider.js.map +1 -1
  260. package/switch/internal/switch.d.ts +9 -25
  261. package/switch/internal/switch.js +31 -57
  262. package/switch/internal/switch.js.map +1 -1
  263. package/tabs/harness.js +3 -3
  264. package/tabs/harness.js.map +1 -1
  265. package/tabs/internal/_tab.scss +27 -35
  266. package/tabs/internal/primary-tab.d.ts +0 -2
  267. package/tabs/internal/tab-styles.css.js +1 -1
  268. package/tabs/internal/tab-styles.css.js.map +1 -1
  269. package/tabs/internal/tab.d.ts +4 -5
  270. package/tabs/internal/tab.js +34 -22
  271. package/tabs/internal/tab.js.map +1 -1
  272. package/tabs/internal/tabs.d.ts +6 -2
  273. package/tabs/internal/tabs.js +18 -11
  274. package/tabs/internal/tabs.js.map +1 -1
  275. package/textfield/filled-text-field.js +1 -2
  276. package/textfield/filled-text-field.js.map +1 -1
  277. package/textfield/harness.js +3 -2
  278. package/textfield/harness.js.map +1 -1
  279. package/textfield/internal/text-field.d.ts +26 -18
  280. package/textfield/internal/text-field.js +81 -58
  281. package/textfield/internal/text-field.js.map +1 -1
  282. package/textfield/outlined-text-field.js +1 -2
  283. package/textfield/outlined-text-field.js.map +1 -1
  284. package/tokens/_index.scss +3 -0
  285. package/tokens/_md-comp-elevated-card.scss +63 -0
  286. package/tokens/_md-comp-filled-card.scss +63 -0
  287. package/tokens/_md-comp-icon.scss +2 -0
  288. package/tokens/_md-comp-outlined-card.scss +69 -0
  289. package/tokens/_md-comp-test-table.scss +1 -0
  290. package/internal/controller/element-internals.d.ts +0 -35
  291. package/internal/controller/element-internals.js +0 -24
  292. package/internal/controller/element-internals.js.map +0 -1
  293. package/select/internal/filled-forced-colors-styles.css.js +0 -9
  294. package/select/internal/filled-forced-colors-styles.css.js.map +0 -1
  295. package/select/internal/filled-forced-colors-styles.scss +0 -29
  296. package/select/internal/outlined-forced-colors-styles.css.js +0 -9
  297. package/select/internal/outlined-forced-colors-styles.css.js.map +0 -1
  298. package/select/internal/outlined-forced-colors-styles.scss +0 -29
  299. package/textfield/internal/filled-forced-colors-styles.css.js +0 -9
  300. package/textfield/internal/filled-forced-colors-styles.css.js.map +0 -1
  301. package/textfield/internal/filled-forced-colors-styles.scss +0 -29
  302. package/textfield/internal/outlined-forced-colors-styles.css.js +0 -9
  303. package/textfield/internal/outlined-forced-colors-styles.css.js.map +0 -1
  304. package/textfield/internal/outlined-forced-colors-styles.scss +0 -29
  305. /package/{select/internal/filled-forced-colors-styles.css.d.ts → labs/card/internal/elevated-styles.css.d.ts} +0 -0
  306. /package/{select/internal/outlined-forced-colors-styles.css.d.ts → labs/card/internal/filled-styles.css.d.ts} +0 -0
  307. /package/{textfield/internal/filled-forced-colors-styles.css.d.ts → labs/card/internal/outlined-styles.css.d.ts} +0 -0
  308. /package/{textfield/internal/outlined-forced-colors-styles.css.d.ts → labs/card/internal/shared-styles.css.d.ts} +0 -0
@@ -7,18 +7,22 @@ import '../../elevation/elevation.js';
7
7
  import '../../focus/md-focus-ring.js';
8
8
  import '../../ripple/ripple.js';
9
9
  import { LitElement, PropertyValues } from 'lit';
10
+ import { getFormValue } from '../../labs/behaviors/form-associated.js';
11
+ declare const sliderBaseClass: import("../../labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../labs/behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../labs/behaviors/form-associated.js").FormAssociatedConstructor, import("../../labs/behaviors/form-associated.js").FormAssociated>;
10
12
  /**
11
13
  * Slider component.
14
+ *
15
+ *
16
+ * @fires change {Event} The native `change` event on
17
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event)
18
+ * --bubbles
19
+ * @fires input {InputEvent} The native `input` event on
20
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)
21
+ * --bubbles --composed
12
22
  */
13
- export declare class Slider extends LitElement {
23
+ export declare class Slider extends sliderBaseClass {
14
24
  /** @nocollapse */
15
25
  static shadowRootOptions: ShadowRootInit;
16
- /** @nocollapse */
17
- static readonly formAssociated = true;
18
- /**
19
- * Whether or not the slider is disabled.
20
- */
21
- disabled: boolean;
22
26
  /**
23
27
  * The slider minimum value
24
28
  */
@@ -92,11 +96,6 @@ export declare class Slider extends LitElement {
92
96
  * slideable handles for the valueStart and valueEnd properties.
93
97
  */
94
98
  range: boolean;
95
- /**
96
- * The HTML name to use in form submission.
97
- */
98
- get name(): string;
99
- set name(name: string);
100
99
  /**
101
100
  * The HTML name to use in form submission for a range slider's starting
102
101
  * value. Use `name` instead if both the start and end values should use the
@@ -111,14 +110,6 @@ export declare class Slider extends LitElement {
111
110
  */
112
111
  get nameEnd(): string;
113
112
  set nameEnd(name: string);
114
- /**
115
- * The associated form element with which this element's value will submit.
116
- */
117
- get form(): HTMLFormElement;
118
- /**
119
- * The labels this element is associated with.
120
- */
121
- get labels(): NodeList;
122
113
  private readonly inputStart;
123
114
  private readonly handleStart;
124
115
  private readonly rippleStart;
@@ -136,13 +127,11 @@ export declare class Slider extends LitElement {
136
127
  private get renderAriaLabelEnd();
137
128
  private get renderAriaValueTextEnd();
138
129
  private ripplePointerId;
139
- private isRedisptchingEvent;
130
+ private isRedispatchingEvent;
140
131
  private action?;
141
- private readonly internals;
142
132
  constructor();
143
133
  focus(): void;
144
134
  protected willUpdate(changed: PropertyValues): void;
145
- protected update(changed: PropertyValues<Slider>): void;
146
135
  protected updated(changed: PropertyValues): void;
147
136
  protected render(): import("lit-html").TemplateResult<1>;
148
137
  private renderTrack;
@@ -180,8 +169,10 @@ export declare class Slider extends LitElement {
180
169
  private clampAction;
181
170
  private handleInput;
182
171
  private handleChange;
183
- /** @private */
172
+ disabled: boolean;
173
+ name: string;
174
+ [getFormValue](): string | FormData;
184
175
  formResetCallback(): void;
185
- /** @private */
186
176
  formStateRestoreCallback(state: string | Array<[string, string]> | null): void;
187
177
  }
178
+ export {};
@@ -13,22 +13,25 @@ import { classMap } from 'lit/directives/class-map.js';
13
13
  import { styleMap } from 'lit/directives/style-map.js';
14
14
  import { when } from 'lit/directives/when.js';
15
15
  import { requestUpdateOnAriaChange } from '../../internal/aria/delegate.js';
16
- import { dispatchActivationClick, isActivationClick, redispatchEvent } from '../../internal/controller/events.js';
16
+ import { dispatchActivationClick, isActivationClick, redispatchEvent, } from '../../internal/controller/events.js';
17
+ import { mixinElementInternals } from '../../labs/behaviors/element-internals.js';
18
+ import { getFormValue, mixinFormAssociated, } from '../../labs/behaviors/form-associated.js';
17
19
  // Disable warning for classMap with destructuring
18
20
  // tslint:disable:no-implicit-dictionary-conversion
21
+ // Separate variable needed for closure.
22
+ const sliderBaseClass = mixinFormAssociated(mixinElementInternals(LitElement));
19
23
  /**
20
24
  * Slider component.
25
+ *
26
+ *
27
+ * @fires change {Event} The native `change` event on
28
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event)
29
+ * --bubbles
30
+ * @fires input {InputEvent} The native `input` event on
31
+ * [`<input>`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event)
32
+ * --bubbles --composed
21
33
  */
22
- export class Slider extends LitElement {
23
- /**
24
- * The HTML name to use in form submission.
25
- */
26
- get name() {
27
- return this.getAttribute('name') ?? '';
28
- }
29
- set name(name) {
30
- this.setAttribute('name', name);
31
- }
34
+ export class Slider extends sliderBaseClass {
32
35
  /**
33
36
  * The HTML name to use in form submission for a range slider's starting
34
37
  * value. Use `name` instead if both the start and end values should use the
@@ -51,29 +54,18 @@ export class Slider extends LitElement {
51
54
  set nameEnd(name) {
52
55
  this.setAttribute('name-end', name);
53
56
  }
54
- /**
55
- * The associated form element with which this element's value will submit.
56
- */
57
- get form() {
58
- return this.internals.form;
59
- }
60
- /**
61
- * The labels this element is associated with.
62
- */
63
- get labels() {
64
- return this.internals.labels;
65
- }
66
57
  // Note: start aria-* properties are only applied when range=true, which is
67
58
  // why they do not need to handle both cases.
68
59
  get renderAriaLabelStart() {
69
60
  // Needed for closure conformance
70
61
  const { ariaLabel } = this;
71
- return this.ariaLabelStart || ariaLabel && `${ariaLabel} start` ||
72
- this.valueLabelStart || String(this.valueStart);
62
+ return (this.ariaLabelStart ||
63
+ (ariaLabel && `${ariaLabel} start`) ||
64
+ this.valueLabelStart ||
65
+ String(this.valueStart));
73
66
  }
74
67
  get renderAriaValueTextStart() {
75
- return this.ariaValueTextStart || this.valueLabelStart ||
76
- String(this.valueStart);
68
+ return (this.ariaValueTextStart || this.valueLabelStart || String(this.valueStart));
77
69
  }
78
70
  // Note: end aria-* properties are applied for single and range sliders, which
79
71
  // is why it needs to handle `this.range` (while start aria-* properties do
@@ -82,15 +74,16 @@ export class Slider extends LitElement {
82
74
  // Needed for closure conformance
83
75
  const { ariaLabel } = this;
84
76
  if (this.range) {
85
- return this.ariaLabelEnd || ariaLabel && `${ariaLabel} end` ||
86
- this.valueLabelEnd || String(this.valueEnd);
77
+ return (this.ariaLabelEnd ||
78
+ (ariaLabel && `${ariaLabel} end`) ||
79
+ this.valueLabelEnd ||
80
+ String(this.valueEnd));
87
81
  }
88
82
  return ariaLabel || this.valueLabel || String(this.value);
89
83
  }
90
84
  get renderAriaValueTextEnd() {
91
85
  if (this.range) {
92
- return this.ariaValueTextEnd || this.valueLabelEnd ||
93
- String(this.valueEnd);
86
+ return (this.ariaValueTextEnd || this.valueLabelEnd || String(this.valueEnd));
94
87
  }
95
88
  // Needed for conformance
96
89
  const { ariaValueText } = this;
@@ -98,10 +91,6 @@ export class Slider extends LitElement {
98
91
  }
99
92
  constructor() {
100
93
  super();
101
- /**
102
- * Whether or not the slider is disabled.
103
- */
104
- this.disabled = false;
105
94
  /**
106
95
  * The slider minimum value
107
96
  */
@@ -172,9 +161,8 @@ export class Slider extends LitElement {
172
161
  this.handlesOverlapping = false;
173
162
  // used in synthetic events generated to control ripple hover state.
174
163
  this.ripplePointerId = 1;
175
- // flag to prvent processing of re-dispatched input event.
176
- this.isRedisptchingEvent = false;
177
- this.internals = this /* needed for closure */.attachInternals();
164
+ // flag to prevent processing of re-dispatched input event.
165
+ this.isRedispatchingEvent = false;
178
166
  if (!isServer) {
179
167
  this.addEventListener('click', (event) => {
180
168
  if (!isActivationClick(event) || !this.inputEnd) {
@@ -189,13 +177,15 @@ export class Slider extends LitElement {
189
177
  this.inputEnd?.focus();
190
178
  }
191
179
  willUpdate(changed) {
192
- this.renderValueStart = changed.has('valueStart') ?
193
- this.valueStart :
194
- this.inputStart?.valueAsNumber;
180
+ this.renderValueStart = changed.has('valueStart')
181
+ ? this.valueStart
182
+ : this.inputStart?.valueAsNumber;
195
183
  const endValueChanged = (changed.has('valueEnd') && this.range) || changed.has('value');
196
- this.renderValueEnd = endValueChanged ?
197
- (this.range ? this.valueEnd : this.value) :
198
- this.inputEnd?.valueAsNumber;
184
+ this.renderValueEnd = endValueChanged
185
+ ? this.range
186
+ ? this.valueEnd
187
+ : this.value
188
+ : this.inputEnd?.valueAsNumber;
199
189
  // manually handle ripple hover state since the handle is pointer events
200
190
  // none.
201
191
  if (changed.get('handleStartHover') !== undefined) {
@@ -205,21 +195,6 @@ export class Slider extends LitElement {
205
195
  this.toggleRippleHover(this.rippleEnd, this.handleEndHover);
206
196
  }
207
197
  }
208
- update(changed) {
209
- if (changed.has('value') || changed.has('range') ||
210
- changed.has('valueStart') || changed.has('valueEnd')) {
211
- if (this.range) {
212
- const data = new FormData();
213
- data.append(this.nameStart, String(this.valueStart));
214
- data.append(this.nameEnd, String(this.valueEnd));
215
- this.internals.setFormValue(data);
216
- }
217
- else {
218
- this.internals.setFormValue(String(this.value));
219
- }
220
- }
221
- super.update(changed);
222
- }
223
198
  updated(changed) {
224
199
  // Validate input rendered value and re-render if necessary. This ensures
225
200
  // the rendred handle stays in sync with the input thumb which is used for
@@ -250,8 +225,10 @@ export class Slider extends LitElement {
250
225
  else {
251
226
  this.value ?? (this.value = this.renderValueEnd);
252
227
  }
253
- if (changed.has('range') || changed.has('renderValueStart') ||
254
- changed.has('renderValueEnd') || this.isUpdatePending) {
228
+ if (changed.has('range') ||
229
+ changed.has('renderValueStart') ||
230
+ changed.has('renderValueEnd') ||
231
+ this.isUpdatePending) {
255
232
  // Only check if the handle nubs are overlapping, as the ripple touch
256
233
  // target extends subtantially beyond the boundary of the handle nub.
257
234
  const startNub = this.handleStart?.querySelector('.handleNub');
@@ -265,9 +242,9 @@ export class Slider extends LitElement {
265
242
  render() {
266
243
  const step = this.step === 0 ? 1 : this.step;
267
244
  const range = Math.max(this.max - this.min, step);
268
- const startFraction = this.range ?
269
- (((this.renderValueStart ?? this.min) - this.min) / range) :
270
- 0;
245
+ const startFraction = this.range
246
+ ? ((this.renderValueStart ?? this.min) - this.min) / range
247
+ : 0;
271
248
  const endFraction = ((this.renderValueEnd ?? this.min) - this.min) / range;
272
249
  const containerStyles = {
273
250
  // for clipping inputs and active track.
@@ -300,70 +277,72 @@ export class Slider extends LitElement {
300
277
  const handleStartProps = {
301
278
  start: true,
302
279
  hover: this.handleStartHover,
303
- label: labelStart
280
+ label: labelStart,
304
281
  };
305
282
  const handleEndProps = {
306
283
  start: false,
307
284
  hover: this.handleEndHover,
308
- label: labelEnd
285
+ label: labelEnd,
309
286
  };
310
287
  const handleContainerClasses = {
311
- hover: this.handleStartHover || this.handleEndHover
288
+ hover: this.handleStartHover || this.handleEndHover,
312
289
  };
313
- return html `
314
- <div
315
- class="container ${classMap(containerClasses)}"
316
- style=${styleMap(containerStyles)}
317
- >
318
- ${when(this.range, () => this.renderInput(inputStartProps))}
319
- ${this.renderInput(inputEndProps)}
320
- ${this.renderTrack()}
321
- <div class="handleContainerPadded">
322
- <div class="handleContainerBlock">
323
- <div class="handleContainer ${classMap(handleContainerClasses)}">
324
- ${when(this.range, () => this.renderHandle(handleStartProps))}
325
- ${this.renderHandle(handleEndProps)}
326
- </div>
290
+ return html ` <div
291
+ class="container ${classMap(containerClasses)}"
292
+ style=${styleMap(containerStyles)}>
293
+ ${when(this.range, () => this.renderInput(inputStartProps))}
294
+ ${this.renderInput(inputEndProps)} ${this.renderTrack()}
295
+ <div class="handleContainerPadded">
296
+ <div class="handleContainerBlock">
297
+ <div class="handleContainer ${classMap(handleContainerClasses)}">
298
+ ${when(this.range, () => this.renderHandle(handleStartProps))}
299
+ ${this.renderHandle(handleEndProps)}
327
300
  </div>
328
301
  </div>
329
- </div>`;
302
+ </div>
303
+ </div>`;
330
304
  }
331
305
  renderTrack() {
332
306
  return html `
333
- <div class="track"></div>
334
- ${this.ticks ? html `<div class="tickmarks"></div>` : nothing}
335
- `;
307
+ <div class="track"></div>
308
+ ${this.ticks ? html `<div class="tickmarks"></div>` : nothing}
309
+ `;
336
310
  }
337
311
  renderLabel(value) {
338
312
  return html `<div class="label" aria-hidden="true">
339
- <span class="labelContent" part="label">${value}</span>
340
- </div>`;
313
+ <span class="labelContent" part="label">${value}</span>
314
+ </div>`;
341
315
  }
342
- renderHandle({ start, hover, label }) {
316
+ renderHandle({ start, hover, label, }) {
343
317
  const onTop = !this.disabled && start === this.startOnTop;
344
318
  const isOverlapping = !this.disabled && this.handlesOverlapping;
345
319
  const name = start ? 'start' : 'end';
346
- return html `<div class="handle ${classMap({
320
+ return html `<div
321
+ class="handle ${classMap({
347
322
  [name]: true,
348
323
  hover,
349
324
  onTop,
350
- isOverlapping
325
+ isOverlapping,
351
326
  })}">
352
327
  <div class="handleNub"><md-elevation></md-elevation></div>
353
328
  ${when(this.labeled, () => this.renderLabel(label))}
354
329
  <md-focus-ring part="focus-ring" for=${name}></md-focus-ring>
355
- <md-ripple for=${name} class=${name} ?disabled=${this.disabled}></md-ripple>
330
+ <md-ripple
331
+ for=${name}
332
+ class=${name}
333
+ ?disabled=${this.disabled}></md-ripple>
356
334
  </div>`;
357
335
  }
358
- renderInput({ start, value, ariaLabel, ariaValueText, ariaMin, ariaMax }) {
336
+ renderInput({ start, value, ariaLabel, ariaValueText, ariaMin, ariaMax, }) {
359
337
  // Slider requires min/max set to the overall min/max for both inputs.
360
338
  // This is reported to screen readers, which is why we need aria-valuemin
361
339
  // and aria-valuemax.
362
340
  const name = start ? `start` : `end`;
363
- return html `<input type="range"
341
+ return html `<input
342
+ type="range"
364
343
  class="${classMap({
365
344
  start,
366
- end: !start
345
+ end: !start,
367
346
  })}"
368
347
  @focus=${this.handleFocus}
369
348
  @pointerdown=${this.handleDown}
@@ -385,7 +364,7 @@ export class Slider extends LitElement {
385
364
  .value=${String(value)}
386
365
  .tabIndex=${start ? 1 : 0}
387
366
  aria-label=${ariaLabel || nothing}
388
- aria-valuetext=${ariaValueText}>`;
367
+ aria-valuetext=${ariaValueText} />`;
389
368
  }
390
369
  async toggleRippleHover(ripple, hovering) {
391
370
  const rippleEl = await ripple;
@@ -394,10 +373,16 @@ export class Slider extends LitElement {
394
373
  }
395
374
  // TODO(b/269799771): improve slider ripple connection
396
375
  if (hovering) {
397
- rippleEl.handlePointerenter(new PointerEvent('pointerenter', { isPrimary: true, pointerId: this.ripplePointerId }));
376
+ rippleEl.handlePointerenter(new PointerEvent('pointerenter', {
377
+ isPrimary: true,
378
+ pointerId: this.ripplePointerId,
379
+ }));
398
380
  }
399
381
  else {
400
- rippleEl.handlePointerleave(new PointerEvent('pointerleave', { isPrimary: true, pointerId: this.ripplePointerId }));
382
+ rippleEl.handlePointerleave(new PointerEvent('pointerleave', {
383
+ isPrimary: true,
384
+ pointerId: this.ripplePointerId,
385
+ }));
401
386
  }
402
387
  }
403
388
  handleFocus(event) {
@@ -405,13 +390,16 @@ export class Slider extends LitElement {
405
390
  }
406
391
  startAction(event) {
407
392
  const target = event.target;
408
- const fixed = (target === this.inputStart) ? this.inputEnd : this.inputStart;
393
+ const fixed = target === this.inputStart ? this.inputEnd : this.inputStart;
409
394
  this.action = {
410
395
  canFlip: event.type === 'pointerdown',
411
396
  flipped: false,
412
397
  target,
413
398
  fixed,
414
- values: new Map([[target, target.valueAsNumber], [fixed, fixed?.valueAsNumber]])
399
+ values: new Map([
400
+ [target, target.valueAsNumber],
401
+ [fixed, fixed?.valueAsNumber],
402
+ ]),
415
403
  };
416
404
  }
417
405
  finishAction(event) {
@@ -486,8 +474,9 @@ export class Slider extends LitElement {
486
474
  }
487
475
  const { target, fixed } = this.action;
488
476
  const isStart = target === this.inputStart;
489
- return isStart ? target.valueAsNumber > fixed.valueAsNumber :
490
- target.valueAsNumber < fixed.valueAsNumber;
477
+ return isStart
478
+ ? target.valueAsNumber > fixed.valueAsNumber
479
+ : target.valueAsNumber < fixed.valueAsNumber;
491
480
  }
492
481
  // if start/end start coincident and the first drag input would e.g. move
493
482
  // start > end, avoid clamping and "flip" to use the other input
@@ -532,7 +521,7 @@ export class Slider extends LitElement {
532
521
  }
533
522
  handleInput(event) {
534
523
  // avoid processing a re-dispatched event
535
- if (this.isRedisptchingEvent) {
524
+ if (this.isRedispatchingEvent) {
536
525
  return;
537
526
  }
538
527
  let stopPropagation = false;
@@ -563,9 +552,9 @@ export class Slider extends LitElement {
563
552
  }
564
553
  // ensure event path is correct when flipped.
565
554
  if (redispatch) {
566
- this.isRedisptchingEvent = true;
555
+ this.isRedispatchingEvent = true;
567
556
  redispatchEvent(target, event);
568
- this.isRedisptchingEvent = false;
557
+ this.isRedispatchingEvent = false;
569
558
  }
570
559
  }
571
560
  handleChange(event) {
@@ -573,14 +562,22 @@ export class Slider extends LitElement {
573
562
  // clamped values; note, this only occurs for keyboard
574
563
  const changeTarget = event.target;
575
564
  const { target, values } = this.action ?? {};
576
- const squelch = (target && (target.valueAsNumber === values.get(changeTarget)));
565
+ const squelch = target && target.valueAsNumber === values.get(changeTarget);
577
566
  if (!squelch) {
578
567
  redispatchEvent(this, event);
579
568
  }
580
569
  // ensure keyboard triggered change clears action.
581
570
  this.finishAction(event);
582
571
  }
583
- /** @private */
572
+ [getFormValue]() {
573
+ if (this.range) {
574
+ const data = new FormData();
575
+ data.append(this.nameStart, String(this.valueStart));
576
+ data.append(this.nameEnd, String(this.valueEnd));
577
+ return data;
578
+ }
579
+ return String(this.value);
580
+ }
584
581
  formResetCallback() {
585
582
  if (this.range) {
586
583
  const valueStart = this.getAttribute('value-start');
@@ -592,7 +589,6 @@ export class Slider extends LitElement {
592
589
  const value = this.getAttribute('value');
593
590
  this.value = value !== null ? Number(value) : undefined;
594
591
  }
595
- /** @private */
596
592
  formStateRestoreCallback(state) {
597
593
  if (Array.isArray(state)) {
598
594
  const [[, valueStart], [, valueEnd]] = state;
@@ -609,12 +605,10 @@ export class Slider extends LitElement {
609
605
  requestUpdateOnAriaChange(Slider);
610
606
  })();
611
607
  /** @nocollapse */
612
- Slider.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
613
- /** @nocollapse */
614
- Slider.formAssociated = true;
615
- __decorate([
616
- property({ type: Boolean, reflect: true })
617
- ], Slider.prototype, "disabled", void 0);
608
+ Slider.shadowRootOptions = {
609
+ ...LitElement.shadowRootOptions,
610
+ delegatesFocus: true,
611
+ };
618
612
  __decorate([
619
613
  property({ type: Number })
620
614
  ], Slider.prototype, "min", void 0);
@@ -712,7 +706,9 @@ function isOverlapping(elA, elB) {
712
706
  }
713
707
  const a = elA.getBoundingClientRect();
714
708
  const b = elB.getBoundingClientRect();
715
- return !(a.top > b.bottom || a.right < b.left || a.bottom < b.top ||
709
+ return !(a.top > b.bottom ||
710
+ a.right < b.left ||
711
+ a.bottom < b.top ||
716
712
  a.left > b.right);
717
713
  }
718
714
  //# sourceMappingURL=slider.js.map