@material/web 1.0.0-pre.6 → 1.0.0-pre.7
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.
- package/README.md +7 -7
- package/aria/aria.d.ts +43 -0
- package/aria/aria.js +56 -0
- package/aria/aria.js.map +1 -0
- package/aria/delegate.d.ts +37 -0
- package/aria/delegate.js +53 -0
- package/aria/delegate.js.map +1 -0
- package/badge/badge.d.ts +0 -1
- package/badge/badge.js +0 -1
- package/badge/badge.js.map +1 -1
- package/badge/lib/badge.d.ts +8 -7
- package/badge/lib/badge.js +5 -6
- package/badge/lib/badge.js.map +1 -1
- package/button/lib/_elevation.scss +13 -3
- package/button/lib/button.d.ts +1 -12
- package/button/lib/button.js +29 -60
- package/button/lib/button.js.map +1 -1
- package/button/lib/shared-elevation-styles.css.js +1 -1
- package/button/lib/shared-elevation-styles.css.js.map +1 -1
- package/checkbox/lib/checkbox.d.ts +0 -1
- package/checkbox/lib/checkbox.js +33 -43
- package/checkbox/lib/checkbox.js.map +1 -1
- package/chips/_filter-chip.scss +6 -0
- package/chips/filter-chip.d.ts +20 -0
- package/chips/filter-chip.js +24 -0
- package/chips/filter-chip.js.map +1 -0
- package/chips/lib/_filter-chip.scss +141 -0
- package/chips/lib/_shared.scss +18 -14
- package/chips/lib/assist-styles.css.js +1 -1
- package/chips/lib/assist-styles.css.js.map +1 -1
- package/chips/lib/chip.d.ts +8 -3
- package/chips/lib/chip.js +29 -30
- package/chips/lib/chip.js.map +1 -1
- package/chips/lib/filter-chip.d.ts +21 -0
- package/chips/lib/filter-chip.js +47 -0
- package/chips/lib/filter-chip.js.map +1 -0
- package/chips/lib/filter-styles.css.js +9 -0
- package/chips/lib/filter-styles.css.js.map +1 -0
- package/{fab/lib/fab-extended-styles.scss → chips/lib/filter-styles.scss} +3 -3
- package/chips/lib/shared-styles.css.js +1 -1
- package/chips/lib/shared-styles.css.js.map +1 -1
- package/chips/lib/suggestion-styles.css.js +1 -1
- package/chips/lib/suggestion-styles.css.js.map +1 -1
- package/circularprogress/harness.d.ts +1 -0
- package/circularprogress/harness.js +4 -0
- package/circularprogress/harness.js.map +1 -1
- package/circularprogress/lib/circular-progress.d.ts +0 -1
- package/circularprogress/lib/circular-progress.js +16 -19
- package/circularprogress/lib/circular-progress.js.map +1 -1
- package/dialog/lib/_dialog.scss +8 -8
- package/dialog/lib/dialog-styles.css.js +1 -1
- package/dialog/lib/dialog-styles.css.js.map +1 -1
- package/dialog/lib/dialog.js +25 -49
- package/dialog/lib/dialog.js.map +1 -1
- package/divider/lib/divider.js +4 -7
- package/divider/lib/divider.js.map +1 -1
- package/elevation/lib/_elevation.scss +5 -7
- package/elevation/lib/elevation-styles.css.js +1 -1
- package/elevation/lib/elevation-styles.css.js.map +1 -1
- package/fab/_fab.scss +1 -0
- package/fab/branded-fab.d.ts +53 -0
- package/fab/branded-fab.js +56 -0
- package/fab/branded-fab.js.map +1 -0
- package/fab/fab.d.ts +25 -5
- package/fab/fab.js +27 -10
- package/fab/fab.js.map +1 -1
- package/fab/harness.d.ts +1 -2
- package/fab/harness.js +1 -1
- package/fab/harness.js.map +1 -1
- package/fab/lib/_fab-branded.scss +27 -0
- package/fab/lib/_fab.scss +144 -16
- package/fab/lib/_shared.scss +155 -130
- package/fab/lib/fab-branded-styles.css.js +9 -0
- package/fab/lib/fab-branded-styles.css.js.map +1 -0
- package/fab/lib/fab-branded-styles.scss +10 -0
- package/fab/lib/fab-styles.css.js +1 -1
- package/fab/lib/fab-styles.css.js.map +1 -1
- package/fab/lib/fab.d.ts +14 -10
- package/fab/lib/fab.js +19 -12
- package/fab/lib/fab.js.map +1 -1
- package/fab/lib/forced-colors-styles.css.d.ts +1 -0
- package/fab/lib/forced-colors-styles.css.js +9 -0
- package/fab/lib/forced-colors-styles.css.js.map +1 -0
- package/fab/lib/forced-colors-styles.scss +26 -0
- package/fab/lib/shared-styles.css.d.ts +1 -0
- package/fab/lib/shared-styles.css.js +9 -0
- package/fab/lib/shared-styles.css.js.map +1 -0
- package/fab/lib/{fab-shared-styles.scss → shared-styles.scss} +1 -1
- package/fab/lib/{fab-shared.d.ts → shared.d.ts} +24 -16
- package/fab/lib/shared.js +137 -0
- package/fab/lib/shared.js.map +1 -0
- package/field/lib/field.js +14 -27
- package/field/lib/field.js.map +1 -1
- package/focus/focus-ring.d.ts +0 -1
- package/focus/focus-ring.js +0 -1
- package/focus/focus-ring.js.map +1 -1
- package/focus/lib/focus-ring.js +2 -3
- package/focus/lib/focus-ring.js.map +1 -1
- package/focus/strong-focus.js +5 -0
- package/focus/strong-focus.js.map +1 -1
- package/icon/icon.d.ts +0 -1
- package/icon/icon.js +0 -1
- package/icon/icon.js.map +1 -1
- package/icon/lib/_icon.scss +2 -0
- package/icon/lib/icon-styles.css.js +1 -1
- package/icon/lib/icon-styles.css.js.map +1 -1
- package/icon/lib/icon.d.ts +5 -4
- package/icon/lib/icon.js +3 -2
- package/icon/lib/icon.js.map +1 -1
- package/iconbutton/lib/icon-button.d.ts +0 -4
- package/iconbutton/lib/icon-button.js +28 -48
- package/iconbutton/lib/icon-button.js.map +1 -1
- package/linearprogress/_linear-progress.scss +6 -0
- package/linearprogress/harness.d.ts +13 -0
- package/linearprogress/harness.js +18 -0
- package/linearprogress/harness.js.map +1 -0
- package/linearprogress/lib/_linear-progress.scss +380 -0
- package/linearprogress/lib/linear-progress-styles.css.d.ts +1 -0
- package/linearprogress/lib/linear-progress-styles.css.js +9 -0
- package/linearprogress/lib/linear-progress-styles.css.js.map +1 -0
- package/linearprogress/lib/linear-progress-styles.scss +8 -0
- package/linearprogress/lib/linear-progress.d.ts +35 -0
- package/linearprogress/lib/linear-progress.js +127 -0
- package/linearprogress/lib/linear-progress.js.map +1 -0
- package/linearprogress/linear-progress.d.ts +23 -0
- package/linearprogress/linear-progress.js +26 -0
- package/linearprogress/linear-progress.js.map +1 -0
- package/list/lib/_list.scss +6 -49
- package/list/lib/list-styles.css.js +1 -1
- package/list/lib/list-styles.css.js.map +1 -1
- package/list/lib/list.d.ts +1 -3
- package/list/lib/list.js +18 -34
- package/list/lib/list.js.map +1 -1
- package/list/lib/listitem/_list-item.scss +10 -69
- package/list/lib/listitem/forced-colors-styles.css.js +1 -1
- package/list/lib/listitem/forced-colors-styles.css.js.map +1 -1
- package/list/lib/listitem/list-item-styles.css.js +1 -1
- package/list/lib/listitem/list-item-styles.css.js.map +1 -1
- package/list/lib/listitem/list-item.d.ts +2 -4
- package/list/lib/listitem/list-item.js +24 -53
- package/list/lib/listitem/list-item.js.map +1 -1
- package/list/lib/listitemlink/list-item-link.js +4 -6
- package/list/lib/listitemlink/list-item-link.js.map +1 -1
- package/menu/lib/_menu.scss +6 -28
- package/menu/lib/menu-styles.css.js +1 -1
- package/menu/lib/menu-styles.css.js.map +1 -1
- package/menu/lib/menu.d.ts +1 -2
- package/menu/lib/menu.js +38 -63
- package/menu/lib/menu.js.map +1 -1
- package/menu/lib/menuitem/_menu-item.scss +13 -32
- package/menu/lib/menuitem/menu-item-styles.css.js +1 -1
- package/menu/lib/menuitem/menu-item-styles.css.js.map +1 -1
- package/menu/lib/menuitem/menu-item.d.ts +1 -1
- package/menu/lib/menuitem/menu-item.js +4 -6
- package/menu/lib/menuitem/menu-item.js.map +1 -1
- package/menu/lib/menuitemlink/menu-item-link.d.ts +0 -2
- package/menu/lib/menuitemlink/menu-item-link.js +3 -6
- package/menu/lib/menuitemlink/menu-item-link.js.map +1 -1
- package/menu/lib/shared.d.ts +6 -2
- package/menu/lib/shared.js.map +1 -1
- package/menu/lib/submenuitem/sub-menu-item.d.ts +0 -2
- package/menu/lib/submenuitem/sub-menu-item.js +7 -15
- package/menu/lib/submenuitem/sub-menu-item.js.map +1 -1
- package/navigationbar/lib/_navigation-bar.scss +7 -1
- package/navigationbar/lib/navigation-bar-styles.css.js +1 -1
- package/navigationbar/lib/navigation-bar-styles.css.js.map +1 -1
- package/navigationbar/lib/navigation-bar.d.ts +5 -5
- package/navigationbar/lib/navigation-bar.js +17 -18
- package/navigationbar/lib/navigation-bar.js.map +1 -1
- package/navigationbar/navigation-bar.d.ts +0 -1
- package/navigationbar/navigation-bar.js +0 -1
- package/navigationbar/navigation-bar.js.map +1 -1
- package/navigationdrawer/lib/navigation-drawer-modal.d.ts +5 -10
- package/navigationdrawer/lib/navigation-drawer-modal.js +19 -41
- package/navigationdrawer/lib/navigation-drawer-modal.js.map +1 -1
- package/navigationdrawer/lib/navigation-drawer.d.ts +5 -9
- package/navigationdrawer/lib/navigation-drawer.js +17 -38
- package/navigationdrawer/lib/navigation-drawer.js.map +1 -1
- package/navigationdrawer/navigation-drawer-modal.d.ts +0 -1
- package/navigationdrawer/navigation-drawer-modal.js +0 -1
- package/navigationdrawer/navigation-drawer-modal.js.map +1 -1
- package/navigationdrawer/navigation-drawer.d.ts +0 -1
- package/navigationdrawer/navigation-drawer.js +0 -1
- package/navigationdrawer/navigation-drawer.js.map +1 -1
- package/navigationtab/lib/navigation-tab.d.ts +19 -24
- package/navigationtab/lib/navigation-tab.js +48 -68
- package/navigationtab/lib/navigation-tab.js.map +1 -1
- package/navigationtab/navigation-tab.d.ts +0 -1
- package/navigationtab/navigation-tab.js +0 -1
- package/navigationtab/navigation-tab.js.map +1 -1
- package/package.json +1 -1
- package/radio/lib/radio.d.ts +0 -1
- package/radio/lib/radio.js +30 -37
- package/radio/lib/radio.js.map +1 -1
- package/ripple/lib/ripple.js +7 -13
- package/ripple/lib/ripple.js.map +1 -1
- package/segmentedbutton/lib/outlined-segmented-button.d.ts +16 -7
- package/segmentedbutton/lib/outlined-segmented-button.js +3 -3
- package/segmentedbutton/lib/outlined-segmented-button.js.map +1 -1
- package/segmentedbutton/lib/segmented-button.d.ts +27 -33
- package/segmentedbutton/lib/segmented-button.js +42 -75
- package/segmentedbutton/lib/segmented-button.js.map +1 -1
- package/segmentedbutton/outlined-segmented-button.d.ts +0 -1
- package/segmentedbutton/outlined-segmented-button.js +0 -1
- package/segmentedbutton/outlined-segmented-button.js.map +1 -1
- package/segmentedbuttonset/lib/outlined-segmented-button-set.d.ts +6 -4
- package/segmentedbuttonset/lib/outlined-segmented-button-set.js +3 -2
- package/segmentedbuttonset/lib/outlined-segmented-button-set.js.map +1 -1
- package/segmentedbuttonset/lib/segmented-button-set.d.ts +3 -9
- package/segmentedbuttonset/lib/segmented-button-set.js +14 -20
- package/segmentedbuttonset/lib/segmented-button-set.js.map +1 -1
- package/segmentedbuttonset/outlined-segmented-button-set.d.ts +0 -1
- package/segmentedbuttonset/outlined-segmented-button-set.js +0 -1
- package/segmentedbuttonset/outlined-segmented-button-set.js.map +1 -1
- package/select/_filled-select.scss +6 -0
- package/select/_outlined-select.scss +6 -0
- package/select/filled-select.d.ts +41 -0
- package/select/filled-select.js +46 -0
- package/select/filled-select.js.map +1 -0
- package/select/harness.d.ts +24 -0
- package/select/harness.js +53 -0
- package/select/harness.js.map +1 -0
- package/select/lib/_filled-select.scss +163 -0
- package/select/lib/_outlined-select.scss +146 -0
- package/select/lib/_shared.scss +48 -0
- package/select/lib/filled-forced-colors-styles.css.d.ts +1 -0
- package/select/lib/filled-forced-colors-styles.css.js +9 -0
- package/select/lib/filled-forced-colors-styles.css.js.map +1 -0
- package/select/lib/filled-forced-colors-styles.scss +29 -0
- package/select/lib/filled-select-styles.css.d.ts +1 -0
- package/select/lib/filled-select-styles.css.js +9 -0
- package/select/lib/filled-select-styles.css.js.map +1 -0
- package/select/lib/filled-select-styles.scss +10 -0
- package/select/lib/filled-select.d.ts +10 -0
- package/select/lib/filled-select.js +16 -0
- package/select/lib/filled-select.js.map +1 -0
- package/select/lib/outlined-forced-colors-styles.css.d.ts +1 -0
- package/select/lib/outlined-forced-colors-styles.css.js +9 -0
- package/select/lib/outlined-forced-colors-styles.css.js.map +1 -0
- package/select/lib/outlined-forced-colors-styles.scss +29 -0
- package/select/lib/outlined-select-styles.css.d.ts +1 -0
- package/select/lib/outlined-select-styles.css.js +9 -0
- package/select/lib/outlined-select-styles.css.js.map +1 -0
- package/select/lib/outlined-select-styles.scss +10 -0
- package/select/lib/outlined-select.d.ts +10 -0
- package/select/lib/outlined-select.js +16 -0
- package/select/lib/outlined-select.js.map +1 -0
- package/select/lib/select.d.ts +218 -0
- package/select/lib/select.js +587 -0
- package/select/lib/select.js.map +1 -0
- package/select/lib/selectoption/harness.d.ts +11 -0
- package/select/lib/selectoption/harness.js +12 -0
- package/select/lib/selectoption/harness.js.map +1 -0
- package/select/lib/selectoption/select-option.d.ts +30 -0
- package/select/lib/selectoption/select-option.js +71 -0
- package/select/lib/selectoption/select-option.js.map +1 -0
- package/select/lib/shared-styles.css.d.ts +1 -0
- package/select/lib/shared-styles.css.js +9 -0
- package/select/lib/shared-styles.css.js.map +1 -0
- package/select/lib/shared-styles.scss +10 -0
- package/select/lib/shared.d.ts +52 -0
- package/select/lib/shared.js +41 -0
- package/select/lib/shared.js.map +1 -0
- package/select/outlined-select.d.ts +41 -0
- package/select/outlined-select.js +46 -0
- package/select/outlined-select.js.map +1 -0
- package/select/select-option.d.ts +44 -0
- package/select/select-option.js +51 -0
- package/select/select-option.js.map +1 -0
- package/slider/harness.d.ts +1 -0
- package/slider/harness.js +5 -0
- package/slider/harness.js.map +1 -1
- package/slider/lib/_slider.scss +146 -164
- package/slider/lib/forced-colors-styles.css.js +1 -1
- package/slider/lib/forced-colors-styles.css.js.map +1 -1
- package/slider/lib/forced-colors-styles.scss +2 -2
- package/slider/lib/slider-styles.css.js +1 -1
- package/slider/lib/slider-styles.css.js.map +1 -1
- package/slider/lib/slider.d.ts +2 -7
- package/slider/lib/slider.js +64 -118
- package/slider/lib/slider.js.map +1 -1
- package/switch/lib/switch.d.ts +0 -2
- package/switch/lib/switch.js +32 -54
- package/switch/lib/switch.js.map +1 -1
- package/textfield/lib/text-field.d.ts +0 -10
- package/textfield/lib/text-field.js +45 -115
- package/textfield/lib/text-field.js.map +1 -1
- package/tokens/_index.scss +3 -0
- package/tokens/_md-comp-assist-chip.scss +25 -20
- package/tokens/_md-comp-elevation.scss +0 -4
- package/tokens/_md-comp-fab-branded.scss +109 -1
- package/tokens/_md-comp-fab.scss +290 -0
- package/tokens/_md-comp-filled-select.scss +150 -1
- package/tokens/_md-comp-filter-chip.scss +103 -93
- package/tokens/_md-comp-input-chip.scss +77 -85
- package/tokens/_md-comp-linear-progress-indicator.scss +14 -1
- package/tokens/_md-comp-list-item.scss +201 -0
- package/tokens/_md-comp-list.scss +107 -26
- package/tokens/_md-comp-menu-item.scss +76 -0
- package/tokens/_md-comp-menu.scss +52 -2
- package/tokens/_md-comp-outlined-select.scss +150 -1
- package/tokens/_md-comp-slider.scss +13 -1
- package/tokens/_md-comp-suggestion-chip.scss +29 -21
- package/tokens/_values.scss +5 -2
- package/types/aria.d.ts +61 -1
- package/actionelement/action-element.d.ts +0 -79
- package/actionelement/action-element.js +0 -97
- package/actionelement/action-element.js.map +0 -1
- package/button/lib/state.d.ts +0 -10
- package/button/lib/state.js +0 -7
- package/button/lib/state.js.map +0 -1
- package/controller/action-controller.d.ts +0 -147
- package/controller/action-controller.js +0 -286
- package/controller/action-controller.js.map +0 -1
- package/decorators/aria-property.d.ts +0 -32
- package/decorators/aria-property.js +0 -99
- package/decorators/aria-property.js.map +0 -1
- package/fab/_fab-extended.scss +0 -6
- package/fab/fab-extended.d.ts +0 -23
- package/fab/fab-extended.js +0 -29
- package/fab/fab-extended.js.map +0 -1
- package/fab/lib/_fab-extended.scss +0 -73
- package/fab/lib/fab-extended-styles.css.js +0 -9
- package/fab/lib/fab-extended-styles.css.js.map +0 -1
- package/fab/lib/fab-extended.d.ts +0 -19
- package/fab/lib/fab-extended.js +0 -28
- package/fab/lib/fab-extended.js.map +0 -1
- package/fab/lib/fab-shared-styles.css.js +0 -9
- package/fab/lib/fab-shared-styles.css.js.map +0 -1
- package/fab/lib/fab-shared.js +0 -121
- package/fab/lib/fab-shared.js.map +0 -1
- package/slider/lib/_tokens.scss +0 -65
- /package/{fab/lib/fab-extended-styles.css.d.ts → chips/lib/filter-styles.css.d.ts} +0 -0
- /package/fab/lib/{fab-shared-styles.css.d.ts → fab-branded-styles.css.d.ts} +0 -0
package/slider/lib/slider.d.ts
CHANGED
|
@@ -18,7 +18,6 @@ export declare class Slider extends LitElement {
|
|
|
18
18
|
* @nocollapse
|
|
19
19
|
*/
|
|
20
20
|
static formAssociated: boolean;
|
|
21
|
-
ariaLabel: string;
|
|
22
21
|
/**
|
|
23
22
|
* Whether or not the slider is disabled.
|
|
24
23
|
*/
|
|
@@ -92,11 +91,8 @@ export declare class Slider extends LitElement {
|
|
|
92
91
|
private rippleBShowing;
|
|
93
92
|
private handleAHover;
|
|
94
93
|
private handleBHover;
|
|
95
|
-
private handleAPressed;
|
|
96
|
-
private handleBPressed;
|
|
97
94
|
private onTopId;
|
|
98
95
|
private handlesOverlapping;
|
|
99
|
-
private isInteracting;
|
|
100
96
|
constructor();
|
|
101
97
|
focus(): void;
|
|
102
98
|
get valueAsString(): string;
|
|
@@ -109,14 +105,13 @@ export declare class Slider extends LitElement {
|
|
|
109
105
|
protected renderTrack(): import("lit-html").TemplateResult<1>;
|
|
110
106
|
protected renderFocusRing(visible: boolean): import("lit-html").TemplateResult<1>;
|
|
111
107
|
protected renderLabel(value: string): import("lit-html").TemplateResult<1>;
|
|
112
|
-
protected renderHandle({ id, lesser, showRipple, focusRequested, showFocus, hover,
|
|
108
|
+
protected renderHandle({ id, lesser, showRipple, focusRequested, showFocus, hover, label }: {
|
|
113
109
|
id: string;
|
|
114
110
|
lesser: boolean;
|
|
115
111
|
focusRequested: boolean;
|
|
116
112
|
showRipple: boolean;
|
|
117
113
|
showFocus: boolean;
|
|
118
114
|
hover: boolean;
|
|
119
|
-
pressed: boolean;
|
|
120
115
|
label: string;
|
|
121
116
|
}): import("lit-html").TemplateResult<1>;
|
|
122
117
|
protected renderInput({ id, lesser, value, label, getRipple }: {
|
|
@@ -134,8 +129,8 @@ export declare class Slider extends LitElement {
|
|
|
134
129
|
protected updateFocusVisible(e: Event): void;
|
|
135
130
|
protected handleFocus(e: Event): void;
|
|
136
131
|
protected handleBlur(e: Event): void;
|
|
132
|
+
private ripplePointerId;
|
|
137
133
|
protected handleDown(e: PointerEvent): void;
|
|
138
|
-
protected handleUp(e: PointerEvent): void;
|
|
139
134
|
/**
|
|
140
135
|
* The move handler tracks handle hovering to facilitate proper ripple
|
|
141
136
|
* behavior on the slider handle. This is needed because user interaction with
|
package/slider/lib/slider.js
CHANGED
|
@@ -3,23 +3,22 @@
|
|
|
3
3
|
* Copyright 2023 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
var _a;
|
|
7
|
+
import { __decorate } from "tslib";
|
|
7
8
|
import '../../elevation/elevation.js';
|
|
8
9
|
import '../../focus/focus-ring.js';
|
|
9
10
|
import '../../ripple/ripple.js';
|
|
10
|
-
import { html, LitElement, nothing } from 'lit';
|
|
11
|
+
import { html, isServer, LitElement, nothing } from 'lit';
|
|
11
12
|
import { property, query, queryAsync, state } from 'lit/decorators.js';
|
|
12
13
|
import { classMap } from 'lit/directives/class-map.js';
|
|
13
14
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
14
15
|
import { when } from 'lit/directives/when.js';
|
|
16
|
+
import { requestUpdateOnAriaChange } from '../../aria/delegate.js';
|
|
15
17
|
import { dispatchActivationClick, isActivationClick, redispatchEvent } from '../../controller/events.js';
|
|
16
18
|
import { FormController, getFormValue } from '../../controller/form-controller.js';
|
|
17
19
|
import { stringConverter } from '../../controller/string-converter.js';
|
|
18
|
-
import { ariaProperty } from '../../decorators/aria-property.js';
|
|
19
20
|
import { pointerPress, shouldShowStrongFocus } from '../../focus/strong-focus.js';
|
|
20
21
|
import { ripple } from '../../ripple/directive.js';
|
|
21
|
-
// This is required for decorators.
|
|
22
|
-
// tslint:disable:no-new-decorators
|
|
23
22
|
// Disable warning for classMap with destructuring
|
|
24
23
|
// tslint:disable:quoted-properties-on-dictionary
|
|
25
24
|
function inBounds({ x, y }, element) {
|
|
@@ -130,7 +129,7 @@ export class Slider extends LitElement {
|
|
|
130
129
|
this.valueB = 0;
|
|
131
130
|
this.focusRingAShowing = false;
|
|
132
131
|
this.focusRingBShowing = false;
|
|
133
|
-
// allows for lazy rendering of the focus ring by
|
|
132
|
+
// allows for lazy rendering of the focus ring by latching to true when the
|
|
134
133
|
// focus ring should be rendered.
|
|
135
134
|
this.focusRingARequested = false;
|
|
136
135
|
this.focusRingBRequested = false;
|
|
@@ -141,11 +140,8 @@ export class Slider extends LitElement {
|
|
|
141
140
|
// interaction targets.
|
|
142
141
|
this.handleAHover = false;
|
|
143
142
|
this.handleBHover = false;
|
|
144
|
-
this.handleAPressed = false;
|
|
145
|
-
this.handleBPressed = false;
|
|
146
143
|
this.onTopId = 'b';
|
|
147
144
|
this.handlesOverlapping = false;
|
|
148
|
-
this.isInteracting = false;
|
|
149
145
|
// If range should be allowed (detected via value format).
|
|
150
146
|
this.allowRange = false;
|
|
151
147
|
this.renderRipple = (id) => html `<md-ripple class=${id} ?disabled=${this.disabled} unbounded></md-ripple>`;
|
|
@@ -163,14 +159,18 @@ export class Slider extends LitElement {
|
|
|
163
159
|
this.rippleBShowing = true;
|
|
164
160
|
return this.rippleB;
|
|
165
161
|
};
|
|
162
|
+
// used in synthetic events generated to control ripple hover state.
|
|
163
|
+
this.ripplePointerId = 1;
|
|
166
164
|
this.addController(new FormController(this));
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
165
|
+
if (!isServer) {
|
|
166
|
+
this.addEventListener('click', (event) => {
|
|
167
|
+
if (!isActivationClick(event)) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.focus();
|
|
171
|
+
dispatchActivationClick(this.inputB);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
174
|
}
|
|
175
175
|
focus() {
|
|
176
176
|
this.inputB?.focus();
|
|
@@ -226,15 +226,12 @@ export class Slider extends LitElement {
|
|
|
226
226
|
const isFlipped = this.isFlipped();
|
|
227
227
|
const containerStyles = {
|
|
228
228
|
// for clipping inputs and active track.
|
|
229
|
-
'--
|
|
230
|
-
'--
|
|
229
|
+
'--slider-lower-fraction': String(lowerFraction),
|
|
230
|
+
'--slider-upper-fraction': String(upperFraction),
|
|
231
231
|
// for generating tick marks
|
|
232
|
-
'--
|
|
233
|
-
};
|
|
234
|
-
const containerClasses = {
|
|
235
|
-
interacting: this.isInteracting,
|
|
236
|
-
ranged: this.allowRange
|
|
232
|
+
'--slider-tick-count': String(range / step),
|
|
237
233
|
};
|
|
234
|
+
const containerClasses = { ranged: this.allowRange };
|
|
238
235
|
// optional label values to show in place of the value.
|
|
239
236
|
const labelA = String(this.valueLabel?.[isFlipped ? 1 : 0] ?? this.valueA);
|
|
240
237
|
const labelB = String((this.allowRange ? this.valueLabel?.[isFlipped ? 0 : 1] :
|
|
@@ -261,7 +258,6 @@ export class Slider extends LitElement {
|
|
|
261
258
|
focusRequested: this.focusRingARequested,
|
|
262
259
|
showFocus: this.focusRingAShowing,
|
|
263
260
|
hover: this.handleAHover,
|
|
264
|
-
pressed: this.handleAPressed,
|
|
265
261
|
label: labelA
|
|
266
262
|
};
|
|
267
263
|
const handleBProps = {
|
|
@@ -271,7 +267,6 @@ export class Slider extends LitElement {
|
|
|
271
267
|
focusRequested: this.focusRingBRequested,
|
|
272
268
|
showFocus: this.focusRingBShowing,
|
|
273
269
|
hover: this.handleBHover,
|
|
274
|
-
pressed: this.handleBPressed,
|
|
275
270
|
label: labelB
|
|
276
271
|
};
|
|
277
272
|
const handleContainerClasses = {
|
|
@@ -297,10 +292,7 @@ export class Slider extends LitElement {
|
|
|
297
292
|
}
|
|
298
293
|
renderTrack() {
|
|
299
294
|
const trackClasses = { 'tickMarks': this.withTickMarks };
|
|
300
|
-
return html
|
|
301
|
-
<slot name="track">
|
|
302
|
-
<div class="track ${classMap(trackClasses)}"></div>
|
|
303
|
-
</slot>`;
|
|
295
|
+
return html `<div class="track ${classMap(trackClasses)}"></div>`;
|
|
304
296
|
}
|
|
305
297
|
renderFocusRing(visible) {
|
|
306
298
|
return html `<md-focus-ring .visible=${visible}></md-focus-ring>`;
|
|
@@ -310,22 +302,18 @@ export class Slider extends LitElement {
|
|
|
310
302
|
<span class="labelContent" part="label">${value}</span>
|
|
311
303
|
</div>`;
|
|
312
304
|
}
|
|
313
|
-
renderHandle({ id, lesser, showRipple, focusRequested, showFocus, hover,
|
|
305
|
+
renderHandle({ id, lesser, showRipple, focusRequested, showFocus, hover, label }) {
|
|
314
306
|
const onTop = !this.disabled && id === this.onTopId;
|
|
315
307
|
const isOverlapping = !this.disabled && this.handlesOverlapping;
|
|
316
308
|
return html `<div class="handle ${classMap({
|
|
317
309
|
[id]: true,
|
|
318
310
|
lesser,
|
|
319
311
|
hover,
|
|
320
|
-
pressed,
|
|
321
312
|
onTop,
|
|
322
313
|
isOverlapping
|
|
323
314
|
})}">
|
|
324
|
-
<slot name="handle${this.allowRange ? (lesser ? 'Lesser' : 'Greater') : ''}">
|
|
325
315
|
<div class="handleNub"><md-elevation></md-elevation></div>
|
|
326
316
|
${when(this.withLabel, () => this.renderLabel(label))}
|
|
327
|
-
|
|
328
|
-
</slot>
|
|
329
317
|
${when(showRipple, () => this.renderRipple(id))}
|
|
330
318
|
${when(focusRequested, () => this.renderFocusRing(showFocus))}
|
|
331
319
|
</div>`;
|
|
@@ -333,6 +321,8 @@ export class Slider extends LitElement {
|
|
|
333
321
|
renderInput({ id, lesser, value, label, getRipple }) {
|
|
334
322
|
// when ranged, ensure announcement includes value info.
|
|
335
323
|
const ariaLabelDescriptor = this.allowRange ? ` - ${lesser ? `start` : `end`} handle` : '';
|
|
324
|
+
// Needed for closure conformance
|
|
325
|
+
const { ariaLabel } = this;
|
|
336
326
|
return html `<input type="range"
|
|
337
327
|
class="${classMap({
|
|
338
328
|
lesser,
|
|
@@ -341,7 +331,6 @@ export class Slider extends LitElement {
|
|
|
341
331
|
@focus=${this.handleFocus}
|
|
342
332
|
@blur=${this.handleBlur}
|
|
343
333
|
@pointerdown=${this.handleDown}
|
|
344
|
-
@pointerup=${this.handleUp}
|
|
345
334
|
@pointerenter=${this.handleEnter}
|
|
346
335
|
@pointermove=${this.handleMove}
|
|
347
336
|
@pointerleave=${this.handleLeave}
|
|
@@ -353,7 +342,7 @@ export class Slider extends LitElement {
|
|
|
353
342
|
.step=${String(this.step)}
|
|
354
343
|
.value=${String(value)}
|
|
355
344
|
.tabIndex=${lesser ? 1 : 0}
|
|
356
|
-
aria-label=${`${
|
|
345
|
+
aria-label=${`${ariaLabel}${ariaLabelDescriptor}` || nothing}
|
|
357
346
|
aria-valuetext=${label}
|
|
358
347
|
${ripple(getRipple)}>`;
|
|
359
348
|
}
|
|
@@ -364,10 +353,10 @@ export class Slider extends LitElement {
|
|
|
364
353
|
}
|
|
365
354
|
// TODO(b/269799771): improve slider ripple connection
|
|
366
355
|
if (hovering) {
|
|
367
|
-
rippleEl.handlePointerenter(new PointerEvent('pointerenter', { isPrimary: true, pointerId:
|
|
356
|
+
rippleEl.handlePointerenter(new PointerEvent('pointerenter', { isPrimary: true, pointerId: this.ripplePointerId }));
|
|
368
357
|
}
|
|
369
358
|
else {
|
|
370
|
-
rippleEl.handlePointerleave(new PointerEvent('pointerleave', { isPrimary: true, pointerId:
|
|
359
|
+
rippleEl.handlePointerleave(new PointerEvent('pointerleave', { isPrimary: true, pointerId: this.ripplePointerId }));
|
|
371
360
|
}
|
|
372
361
|
}
|
|
373
362
|
isEventOnA({ target }) {
|
|
@@ -389,23 +378,19 @@ export class Slider extends LitElement {
|
|
|
389
378
|
}
|
|
390
379
|
handleDown(e) {
|
|
391
380
|
pointerPress();
|
|
392
|
-
this.
|
|
381
|
+
this.ripplePointerId = e.pointerId;
|
|
393
382
|
const isA = this.isEventOnA(e);
|
|
394
|
-
const isPrimaryButton = Boolean(e.buttons & 1);
|
|
395
383
|
// Since handle moves to pointer on down and there may not be a move,
|
|
396
384
|
// it needs to be considered hovered..
|
|
397
385
|
this.handleAHover = !this.disabled && isA && Boolean(this.handleA);
|
|
398
|
-
this.handleAPressed = isPrimaryButton && this.handleAHover;
|
|
399
386
|
this.handleBHover = !this.disabled && !isA && Boolean(this.handleB);
|
|
400
|
-
this.handleBPressed = isPrimaryButton && this.handleBHover;
|
|
401
387
|
this.updateFocusVisible(e);
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
}, { once: true });
|
|
388
|
+
// Force Safari to focus input so the label stays displayed; note,
|
|
389
|
+
// Macs don't normally focus non-text type inputs.
|
|
390
|
+
const target = e.target;
|
|
391
|
+
requestAnimationFrame(() => {
|
|
392
|
+
target.focus();
|
|
393
|
+
});
|
|
409
394
|
}
|
|
410
395
|
/**
|
|
411
396
|
* The move handler tracks handle hovering to facilitate proper ripple
|
|
@@ -440,7 +425,7 @@ export class Slider extends LitElement {
|
|
|
440
425
|
}
|
|
441
426
|
this.valueB = this.inputB.valueAsNumber;
|
|
442
427
|
this.updateOnTop(e);
|
|
443
|
-
//
|
|
428
|
+
// update value only on interaction
|
|
444
429
|
const lower = Math.min(this.valueA, this.valueB);
|
|
445
430
|
const upper = Math.max(this.valueA, this.valueB);
|
|
446
431
|
this.value = this.allowRange ? [lower, upper] : this.valueB;
|
|
@@ -449,127 +434,88 @@ export class Slider extends LitElement {
|
|
|
449
434
|
redispatchEvent(this, event);
|
|
450
435
|
}
|
|
451
436
|
}
|
|
437
|
+
_a = Slider;
|
|
438
|
+
(() => {
|
|
439
|
+
requestUpdateOnAriaChange(_a);
|
|
440
|
+
})();
|
|
452
441
|
Slider.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
|
|
453
442
|
/**
|
|
454
443
|
* @nocollapse
|
|
455
444
|
*/
|
|
456
445
|
Slider.formAssociated = true;
|
|
457
446
|
__decorate([
|
|
458
|
-
|
|
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)
|
|
447
|
+
property({ type: Boolean, reflect: true })
|
|
466
448
|
], Slider.prototype, "disabled", void 0);
|
|
467
449
|
__decorate([
|
|
468
|
-
property({ type: Number })
|
|
469
|
-
__metadata("design:type", Object)
|
|
450
|
+
property({ type: Number })
|
|
470
451
|
], Slider.prototype, "min", void 0);
|
|
471
452
|
__decorate([
|
|
472
|
-
property({ type: Number })
|
|
473
|
-
__metadata("design:type", Object)
|
|
453
|
+
property({ type: Number })
|
|
474
454
|
], Slider.prototype, "max", void 0);
|
|
475
455
|
__decorate([
|
|
476
|
-
property({ converter: valueConverter })
|
|
477
|
-
__metadata("design:type", Object)
|
|
456
|
+
property({ converter: valueConverter })
|
|
478
457
|
], Slider.prototype, "value", void 0);
|
|
479
458
|
__decorate([
|
|
480
|
-
property({
|
|
481
|
-
__metadata("design:type", Object)
|
|
459
|
+
property({ converter: tupleConverter })
|
|
482
460
|
], Slider.prototype, "valueLabel", void 0);
|
|
483
461
|
__decorate([
|
|
484
|
-
property({ type: Number })
|
|
485
|
-
__metadata("design:type", Object)
|
|
462
|
+
property({ type: Number })
|
|
486
463
|
], Slider.prototype, "step", void 0);
|
|
487
464
|
__decorate([
|
|
488
|
-
property({ type: Boolean })
|
|
489
|
-
__metadata("design:type", Object)
|
|
465
|
+
property({ type: Boolean })
|
|
490
466
|
], Slider.prototype, "withTickMarks", void 0);
|
|
491
467
|
__decorate([
|
|
492
|
-
property({ type: Boolean })
|
|
493
|
-
__metadata("design:type", Object)
|
|
468
|
+
property({ type: Boolean })
|
|
494
469
|
], Slider.prototype, "withLabel", void 0);
|
|
495
470
|
__decorate([
|
|
496
|
-
property({
|
|
497
|
-
__metadata("design:type", Object)
|
|
471
|
+
property({ reflect: true, converter: stringConverter })
|
|
498
472
|
], Slider.prototype, "name", void 0);
|
|
499
473
|
__decorate([
|
|
500
|
-
query('input.a')
|
|
501
|
-
__metadata("design:type", HTMLInputElement)
|
|
474
|
+
query('input.a')
|
|
502
475
|
], Slider.prototype, "inputA", void 0);
|
|
503
476
|
__decorate([
|
|
504
|
-
query('.handle.a')
|
|
505
|
-
__metadata("design:type", HTMLDivElement)
|
|
477
|
+
query('.handle.a')
|
|
506
478
|
], Slider.prototype, "handleA", void 0);
|
|
507
479
|
__decorate([
|
|
508
|
-
queryAsync('md-ripple.a')
|
|
509
|
-
__metadata("design:type", Promise)
|
|
480
|
+
queryAsync('md-ripple.a')
|
|
510
481
|
], Slider.prototype, "rippleA", void 0);
|
|
511
482
|
__decorate([
|
|
512
|
-
query('input.b')
|
|
513
|
-
__metadata("design:type", HTMLInputElement)
|
|
483
|
+
query('input.b')
|
|
514
484
|
], Slider.prototype, "inputB", void 0);
|
|
515
485
|
__decorate([
|
|
516
|
-
query('.handle.b')
|
|
517
|
-
__metadata("design:type", HTMLDivElement)
|
|
486
|
+
query('.handle.b')
|
|
518
487
|
], Slider.prototype, "handleB", void 0);
|
|
519
488
|
__decorate([
|
|
520
|
-
queryAsync('md-ripple.b')
|
|
521
|
-
__metadata("design:type", Promise)
|
|
489
|
+
queryAsync('md-ripple.b')
|
|
522
490
|
], Slider.prototype, "rippleB", void 0);
|
|
523
491
|
__decorate([
|
|
524
|
-
state()
|
|
525
|
-
__metadata("design:type", Object)
|
|
492
|
+
state()
|
|
526
493
|
], Slider.prototype, "valueA", void 0);
|
|
527
494
|
__decorate([
|
|
528
|
-
state()
|
|
529
|
-
__metadata("design:type", Object)
|
|
495
|
+
state()
|
|
530
496
|
], Slider.prototype, "valueB", void 0);
|
|
531
497
|
__decorate([
|
|
532
|
-
state()
|
|
533
|
-
__metadata("design:type", Object)
|
|
498
|
+
state()
|
|
534
499
|
], Slider.prototype, "focusRingAShowing", void 0);
|
|
535
500
|
__decorate([
|
|
536
|
-
state()
|
|
537
|
-
__metadata("design:type", Object)
|
|
501
|
+
state()
|
|
538
502
|
], Slider.prototype, "focusRingBShowing", void 0);
|
|
539
503
|
__decorate([
|
|
540
|
-
state()
|
|
541
|
-
__metadata("design:type", Object)
|
|
504
|
+
state()
|
|
542
505
|
], Slider.prototype, "rippleAShowing", void 0);
|
|
543
506
|
__decorate([
|
|
544
|
-
state()
|
|
545
|
-
__metadata("design:type", Object)
|
|
507
|
+
state()
|
|
546
508
|
], Slider.prototype, "rippleBShowing", void 0);
|
|
547
509
|
__decorate([
|
|
548
|
-
state()
|
|
549
|
-
__metadata("design:type", Object)
|
|
510
|
+
state()
|
|
550
511
|
], Slider.prototype, "handleAHover", void 0);
|
|
551
512
|
__decorate([
|
|
552
|
-
state()
|
|
553
|
-
__metadata("design:type", Object)
|
|
513
|
+
state()
|
|
554
514
|
], Slider.prototype, "handleBHover", void 0);
|
|
555
515
|
__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)
|
|
516
|
+
state()
|
|
566
517
|
], Slider.prototype, "onTopId", void 0);
|
|
567
518
|
__decorate([
|
|
568
|
-
state()
|
|
569
|
-
__metadata("design:type", Object)
|
|
519
|
+
state()
|
|
570
520
|
], Slider.prototype, "handlesOverlapping", void 0);
|
|
571
|
-
__decorate([
|
|
572
|
-
state(),
|
|
573
|
-
__metadata("design:type", Object)
|
|
574
|
-
], Slider.prototype, "isInteracting", void 0);
|
|
575
521
|
//# sourceMappingURL=slider.js.map
|
package/slider/lib/slider.js.map
CHANGED
|
@@ -1 +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></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"]}
|
|
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, isServer, 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 {requestUpdateOnAriaChange} from '../../aria/delegate.js';\nimport {dispatchActivationClick, isActivationClick, redispatchEvent} from '../../controller/events.js';\nimport {FormController, getFormValue} from '../../controller/form-controller.js';\nimport {stringConverter} from '../../controller/string-converter.js';\nimport {pointerPress, shouldShowStrongFocus} from '../../focus/strong-focus.js';\nimport {ripple} from '../../ripple/directive.js';\nimport {MdRipple} from '../../ripple/ripple.js';\nimport {ARIAMixinStrict} from '../../types/aria.js';\n\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 {\n requestUpdateOnAriaChange(this);\n }\n\n static override shadowRootOptions:\n ShadowRootInit = {...LitElement.shadowRootOptions, delegatesFocus: true};\n\n /**\n * @nocollapse\n */\n static formAssociated = true;\n\n /**\n * Whether or not the 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({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({reflect: true, converter: stringConverter}) 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 latching 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\n @state() private onTopId = 'b';\n @state() private handlesOverlapping = false;\n\n constructor() {\n super();\n this.addController(new FormController(this));\n if (!isServer) {\n this.addEventListener('click', (event: MouseEvent) => {\n if (!isActivationClick(event)) {\n return;\n }\n this.focus();\n dispatchActivationClick(this.inputB);\n });\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 '--slider-lower-fraction': String(lowerFraction),\n '--slider-upper-fraction': String(upperFraction),\n // for generating tick marks\n '--slider-tick-count': String(range / step),\n };\n const containerClasses = {ranged: this.allowRange};\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 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 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`<div class=\"track ${classMap(trackClasses)}\"></div>`;\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, lesser, showRipple, focusRequested, showFocus, hover, label}: {\n id: string,\n lesser: boolean,\n focusRequested: boolean,\n showRipple: boolean,\n showFocus: boolean,\n hover: 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 onTop,\n isOverlapping\n })}\">\n <div class=\"handleNub\"><md-elevation></md-elevation></div>\n ${when(this.withLabel, () => this.renderLabel(label))}\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 // Needed for closure conformance\n const {ariaLabel} = this as ARIAMixinStrict;\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 @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=${`${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 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(new PointerEvent(\n 'pointerenter', {isPrimary: true, pointerId: this.ripplePointerId}));\n } else {\n rippleEl.handlePointerleave(new PointerEvent(\n 'pointerleave', {isPrimary: true, pointerId: this.ripplePointerId}));\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 // used in synthetic events generated to control ripple hover state.\n private ripplePointerId = 1;\n\n protected handleDown(e: PointerEvent) {\n pointerPress();\n this.ripplePointerId = e.pointerId;\n const isA = this.isEventOnA(e);\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.handleBHover = !this.disabled && !isA && Boolean(this.handleB);\n this.updateFocusVisible(e);\n // Force Safari to focus input so the label stays displayed; note,\n // Macs don't normally focus non-text type inputs.\n const target = (e.target as HTMLElement);\n requestAnimationFrame(() => {\n target.focus();\n });\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 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"]}
|
package/switch/lib/switch.d.ts
CHANGED
|
@@ -37,8 +37,6 @@ export declare class Switch extends LitElement {
|
|
|
37
37
|
* overrides the behavior of the `icons` property.
|
|
38
38
|
*/
|
|
39
39
|
showOnlySelectedIcon: boolean;
|
|
40
|
-
ariaLabel: string;
|
|
41
|
-
ariaLabelledBy: string;
|
|
42
40
|
private showFocusRing;
|
|
43
41
|
private showRipple;
|
|
44
42
|
private readonly ripple;
|