@material/web 1.0.0-pre.1 → 1.0.0-pre.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -19
- package/autocomplete/autocomplete-item.js.map +1 -1
- package/autocomplete/autocomplete-list.js.map +1 -1
- package/autocomplete/autocomplete-surface.js.map +1 -1
- package/autocomplete/filled-autocomplete.d.ts +0 -2
- package/autocomplete/filled-autocomplete.js +0 -7
- package/autocomplete/filled-autocomplete.js.map +1 -1
- package/autocomplete/lib/_filled-autocomplete.scss +23 -62
- package/autocomplete/lib/_outlined-autocomplete.scss +24 -63
- package/autocomplete/lib/_shared.scss +6 -10
- package/autocomplete/lib/autocomplete.d.ts +2 -6
- package/autocomplete/lib/autocomplete.js +9 -17
- package/autocomplete/lib/autocomplete.js.map +1 -1
- package/autocomplete/lib/autocompleteitem/autocomplete-item.d.ts +2 -2
- package/autocomplete/lib/autocompleteitem/autocomplete-item.js +2 -2
- package/autocomplete/lib/autocompleteitem/autocomplete-item.js.map +1 -1
- package/autocomplete/lib/autocompletelist/autocomplete-list-styles.scss +2 -0
- package/autocomplete/lib/autocompletelist/autocomplete-list.d.ts +1 -1
- package/autocomplete/lib/autocompletelist/autocomplete-list.js +2 -2
- package/autocomplete/lib/autocompletelist/autocomplete-list.js.map +1 -1
- package/autocomplete/lib/autocompletesurface/autocomplete-surface-styles.scss +2 -0
- package/autocomplete/lib/filled-styles.css.js +1 -1
- package/autocomplete/lib/filled-styles.css.js.map +1 -1
- package/autocomplete/lib/filled-styles.scss +2 -0
- package/autocomplete/lib/outlined-styles.css.js +1 -1
- package/autocomplete/lib/outlined-styles.css.js.map +1 -1
- package/autocomplete/lib/outlined-styles.scss +2 -0
- package/autocomplete/lib/shared-styles.scss +2 -0
- package/autocomplete/outlined-autocomplete.d.ts +0 -2
- package/autocomplete/outlined-autocomplete.js +0 -7
- package/autocomplete/outlined-autocomplete.js.map +1 -1
- package/badge/badge.js.map +1 -1
- package/badge/lib/_badge.scss +10 -13
- package/badge/lib/badge-styles.css.js +1 -1
- package/badge/lib/badge-styles.css.js.map +1 -1
- package/badge/lib/badge-styles.scss +2 -0
- package/badge/lib/badge.js.map +1 -1
- package/button/elevated-button.js.map +1 -1
- package/button/elevated-link-button.js.map +1 -1
- package/button/filled-button.js.map +1 -1
- package/button/filled-link-button.js.map +1 -1
- package/button/lib/_elevated-button.scss +10 -15
- package/button/lib/_elevation.scss +5 -2
- package/button/lib/_filled-button.scss +12 -14
- package/button/lib/_icon.scss +15 -24
- package/button/lib/_outlined-button.scss +10 -15
- package/button/lib/_shared.scss +15 -19
- package/button/lib/_text-button.scss +12 -14
- package/button/lib/_tonal-button.scss +10 -15
- package/button/lib/button.d.ts +0 -3
- package/button/lib/button.js +1 -12
- package/button/lib/button.js.map +1 -1
- package/button/lib/elevated-styles.css.js +1 -1
- package/button/lib/elevated-styles.css.js.map +1 -1
- package/button/lib/elevated-styles.scss +2 -0
- package/button/lib/filled-styles.css.js +1 -1
- package/button/lib/filled-styles.css.js.map +1 -1
- package/button/lib/filled-styles.scss +2 -0
- package/button/lib/link-button.d.ts +0 -1
- package/button/lib/link-button.js +0 -5
- package/button/lib/link-button.js.map +1 -1
- package/button/lib/outlined-styles.css.js +1 -1
- package/button/lib/outlined-styles.css.js.map +1 -1
- package/button/lib/outlined-styles.scss +2 -0
- package/button/lib/shared-elevation-styles.css.js +1 -1
- package/button/lib/shared-elevation-styles.css.js.map +1 -1
- package/button/lib/shared-elevation-styles.scss +2 -0
- package/button/lib/shared-styles.css.js +1 -1
- package/button/lib/shared-styles.css.js.map +1 -1
- package/button/lib/shared-styles.scss +2 -0
- package/button/lib/text-styles.css.js +1 -1
- package/button/lib/text-styles.css.js.map +1 -1
- package/button/lib/text-styles.scss +2 -0
- package/button/lib/tonal-styles.css.js +1 -1
- package/button/lib/tonal-styles.css.js.map +1 -1
- package/button/lib/tonal-styles.scss +2 -0
- package/button/outlined-button.js.map +1 -1
- package/button/outlined-link-button.js.map +1 -1
- package/button/text-button.js.map +1 -1
- package/button/text-link-button.js.map +1 -1
- package/button/tonal-button.js.map +1 -1
- package/button/tonal-link-button.js.map +1 -1
- package/checkbox/checkbox.d.ts +11 -2
- package/checkbox/checkbox.js +11 -2
- package/checkbox/checkbox.js.map +1 -1
- package/checkbox/lib/_checkbox.scss +26 -31
- package/checkbox/lib/checkbox-styles.css.js +1 -1
- package/checkbox/lib/checkbox-styles.css.js.map +1 -1
- package/checkbox/lib/checkbox-styles.scss +2 -0
- package/checkbox/lib/checkbox.d.ts +28 -0
- package/checkbox/lib/checkbox.js +33 -4
- package/checkbox/lib/checkbox.js.map +1 -1
- package/checkbox/lib/forced-colors-styles.scss +2 -0
- package/chips/action/delete-action.js.map +1 -1
- package/chips/action/lib/action.js +4 -4
- package/chips/action/lib/action.js.map +1 -1
- package/chips/action/lib/link-action.js +1 -1
- package/chips/action/lib/link-action.js.map +1 -1
- package/chips/action/lib/primary-action.js.map +1 -1
- package/chips/action/lib/selectable-action.js.map +1 -1
- package/chips/action/link-action.js.map +1 -1
- package/chips/action/presentational-action.js.map +1 -1
- package/chips/action/primary-action.js.map +1 -1
- package/chips/action/selectable-action.js.map +1 -1
- package/chips/chip/lib/_assist-chip-theme.scss +4 -0
- package/chips/chip/lib/_chip-theme.scss +30 -41
- package/chips/chip/lib/_chip.scss +2 -0
- package/chips/chip/lib/_filter-chip-theme.scss +4 -0
- package/chips/chip/lib/_input-chip-theme.scss +4 -0
- package/chips/chip/lib/_suggestion-chip-theme.scss +4 -0
- package/chips/chip/lib/chip.js.map +1 -1
- package/chips/chip/lib/foundation.js +4 -4
- package/chips/chip/lib/foundation.js.map +1 -1
- package/chips/chip/lib/link-chip.js.map +1 -1
- package/chips/chip/lib/selectable-chip.js.map +1 -1
- package/chips/chip/lib/types.d.ts +2 -2
- package/chips/chipset/lib/_chip-set-theme.scss +2 -0
- package/chips/chipset/lib/_chip-set.scss +2 -0
- package/chips/chipset/lib/foundation.js +3 -3
- package/chips/chipset/lib/foundation.js.map +1 -1
- package/chips/chipset/lib/types.d.ts +3 -3
- package/controller/events.js +4 -0
- package/controller/events.js.map +1 -1
- package/controller/form-controller.js.map +1 -1
- package/controller/foundation.d.ts +1 -1
- package/controller/observer.d.ts +2 -2
- package/dialog/_dialog.scss +6 -0
- package/dialog/dialog.d.ts +38 -0
- package/dialog/dialog.js +41 -0
- package/dialog/dialog.js.map +1 -0
- package/dialog/harness.d.ts +18 -0
- package/dialog/harness.js +58 -0
- package/dialog/harness.js.map +1 -0
- package/dialog/lib/_dialog.scss +382 -0
- package/dialog/lib/_tokens.scss +89 -0
- package/dialog/lib/dialog-styles.css.js +9 -0
- package/dialog/lib/dialog-styles.css.js.map +1 -0
- package/dialog/lib/dialog-styles.scss +10 -0
- package/dialog/lib/dialog.d.ts +190 -0
- package/dialog/lib/dialog.js +568 -0
- package/dialog/lib/dialog.js.map +1 -0
- package/divider/_divider.scss +6 -0
- package/divider/divider.d.ts +24 -0
- package/divider/divider.js +27 -0
- package/divider/divider.js.map +1 -0
- package/divider/lib/_divider.scss +56 -0
- package/divider/lib/divider-styles.css.js +9 -0
- package/divider/lib/divider-styles.css.js.map +1 -0
- package/divider/lib/divider-styles.scss +10 -0
- package/divider/lib/divider.d.ts +23 -0
- package/divider/lib/divider.js +41 -0
- package/divider/lib/divider.js.map +1 -0
- package/elevation/elevation.js.map +1 -1
- package/elevation/lib/_elevation.scss +5 -1
- package/elevation/lib/_md-comp-elevation.scss +5 -1
- package/elevation/lib/elevation-styles.css.js +1 -1
- package/elevation/lib/elevation-styles.css.js.map +1 -1
- package/elevation/lib/elevation-styles.scss +2 -0
- package/elevation/lib/elevation.js.map +1 -1
- package/fab/fab-extended.js.map +1 -1
- package/fab/fab.js.map +1 -1
- package/fab/lib/_fab-extended.scss +18 -11
- package/fab/lib/_fab.scss +7 -2
- package/fab/lib/_shared.scss +17 -9
- package/fab/lib/fab-extended-styles.css.js +1 -1
- package/fab/lib/fab-extended-styles.css.js.map +1 -1
- package/fab/lib/fab-extended-styles.scss +2 -0
- package/fab/lib/fab-shared-styles.css.js +1 -1
- package/fab/lib/fab-shared-styles.css.js.map +1 -1
- package/fab/lib/fab-shared-styles.scss +2 -0
- package/fab/lib/fab-shared.d.ts +9 -15
- package/fab/lib/fab-shared.js +21 -33
- package/fab/lib/fab-shared.js.map +1 -1
- package/fab/lib/fab-styles.css.js +1 -1
- package/fab/lib/fab-styles.css.js.map +1 -1
- package/fab/lib/fab-styles.scss +2 -0
- package/field/filled-field.d.ts +1 -1
- package/field/filled-field.js +1 -1
- package/field/filled-field.js.map +1 -1
- package/field/harness.js +1 -1
- package/field/harness.js.map +1 -1
- package/field/lib/_content.scss +35 -50
- package/field/lib/_filled-field.scss +60 -76
- package/field/lib/_label.scss +26 -63
- package/field/lib/_md-comp-filled-field.scss +17 -3
- package/field/lib/_md-comp-outlined-field.scss +16 -5
- package/field/lib/_outlined-field.scss +96 -110
- package/field/lib/_shared.scss +15 -35
- package/field/lib/_supporting-text.scss +25 -52
- package/field/lib/field.d.ts +14 -33
- package/field/lib/field.js +79 -101
- package/field/lib/field.js.map +1 -1
- package/field/lib/filled-field.d.ts +10 -16
- package/field/lib/filled-field.js +14 -37
- package/field/lib/filled-field.js.map +1 -1
- package/field/lib/filled-styles.css.js +1 -1
- package/field/lib/filled-styles.css.js.map +1 -1
- package/field/lib/outlined-field.d.ts +4 -10
- package/field/lib/outlined-field.js +13 -33
- package/field/lib/outlined-field.js.map +1 -1
- package/field/lib/outlined-styles.css.js +1 -1
- package/field/lib/outlined-styles.css.js.map +1 -1
- package/field/lib/shared-styles.css.js +1 -1
- package/field/lib/shared-styles.css.js.map +1 -1
- package/field/outlined-field.d.ts +1 -1
- package/field/outlined-field.js +1 -1
- package/field/outlined-field.js.map +1 -1
- package/focus/focus-ring.js.map +1 -1
- package/focus/lib/_focus-ring.scss +10 -23
- package/focus/lib/_md-comp-focus-ring.scss +4 -0
- package/focus/lib/focus-ring-styles.css.js +1 -1
- package/focus/lib/focus-ring-styles.css.js.map +1 -1
- package/focus/lib/focus-ring-styles.scss +2 -0
- package/focus/lib/focus-ring.d.ts +1 -4
- package/focus/lib/focus-ring.js +2 -11
- package/focus/lib/focus-ring.js.map +1 -1
- package/icon/icon.js.map +1 -1
- package/icon/lib/_icon.scss +2 -0
- package/icon/lib/icon-styles.scss +2 -0
- package/iconbutton/filled-icon-button-toggle.js.map +1 -1
- package/iconbutton/filled-icon-button.js.map +1 -1
- package/iconbutton/filled-link-icon-button.js.map +1 -1
- package/iconbutton/filled-tonal-icon-button-toggle.js.map +1 -1
- package/iconbutton/filled-tonal-icon-button.js.map +1 -1
- package/iconbutton/filled-tonal-link-icon-button.js.map +1 -1
- package/iconbutton/lib/_filled-icon-button.scss +20 -20
- package/iconbutton/lib/_filled-tonal-icon-button.scss +20 -20
- package/iconbutton/lib/_outlined-icon-button.scss +27 -21
- package/iconbutton/lib/_shared.scss +13 -33
- package/iconbutton/lib/_standard-icon-button.scss +25 -24
- package/iconbutton/lib/filled-styles.css.js +1 -1
- package/iconbutton/lib/filled-styles.css.js.map +1 -1
- package/iconbutton/lib/filled-styles.scss +2 -0
- package/iconbutton/lib/filled-tonal-styles.css.js +1 -1
- package/iconbutton/lib/filled-tonal-styles.css.js.map +1 -1
- package/iconbutton/lib/filled-tonal-styles.scss +2 -0
- package/iconbutton/lib/icon-button-toggle.d.ts +13 -42
- package/iconbutton/lib/icon-button-toggle.js +33 -103
- package/iconbutton/lib/icon-button-toggle.js.map +1 -1
- package/iconbutton/lib/icon-button.d.ts +2 -4
- package/iconbutton/lib/icon-button.js +3 -9
- package/iconbutton/lib/icon-button.js.map +1 -1
- package/iconbutton/lib/link-icon-button.js.map +1 -1
- package/iconbutton/lib/outlined-styles.css.js +1 -1
- package/iconbutton/lib/outlined-styles.css.js.map +1 -1
- package/iconbutton/lib/outlined-styles.scss +2 -0
- package/iconbutton/lib/shared-styles.css.js +1 -1
- package/iconbutton/lib/shared-styles.css.js.map +1 -1
- package/iconbutton/lib/shared-styles.scss +2 -0
- package/iconbutton/lib/standard-styles.css.js +1 -1
- package/iconbutton/lib/standard-styles.css.js.map +1 -1
- package/iconbutton/lib/standard-styles.scss +2 -0
- package/iconbutton/outlined-icon-button-toggle.js.map +1 -1
- package/iconbutton/outlined-icon-button.js.map +1 -1
- package/iconbutton/outlined-link-icon-button.js.map +1 -1
- package/iconbutton/standard-icon-button-toggle.js.map +1 -1
- package/iconbutton/standard-icon-button.js.map +1 -1
- package/iconbutton/standard-link-icon-button.js.map +1 -1
- package/list/lib/_list.scss +35 -39
- package/list/lib/avatar/_list-item-avatar.scss +3 -1
- package/list/lib/avatar/list-item-avatar-styles.css.js +1 -1
- package/list/lib/avatar/list-item-avatar-styles.css.js.map +1 -1
- package/list/lib/avatar/list-item-avatar-styles.scss +2 -0
- package/list/lib/avatar/list-item-avatar.d.ts +9 -4
- package/list/lib/avatar/list-item-avatar.js +24 -11
- package/list/lib/avatar/list-item-avatar.js.map +1 -1
- package/list/lib/icon/_list-item-icon.scss +7 -1
- package/list/lib/icon/list-item-icon-styles.css.js +1 -1
- package/list/lib/icon/list-item-icon-styles.css.js.map +1 -1
- package/list/lib/icon/list-item-icon-styles.scss +2 -0
- package/list/lib/icon/list-item-icon.d.ts +0 -3
- package/list/lib/icon/list-item-icon.js +1 -12
- package/list/lib/icon/list-item-icon.js.map +1 -1
- package/list/lib/image/_list-item-image.scss +6 -2
- package/list/lib/image/list-item-image-styles.css.js +1 -1
- package/list/lib/image/list-item-image-styles.css.js.map +1 -1
- package/list/lib/image/list-item-image-styles.scss +2 -0
- package/list/lib/image/list-item-image.d.ts +11 -4
- package/list/lib/image/list-item-image.js +24 -13
- package/list/lib/image/list-item-image.js.map +1 -1
- package/list/lib/list-styles.css.js +1 -1
- package/list/lib/list-styles.css.js.map +1 -1
- package/list/lib/list-styles.scss +2 -0
- package/list/lib/list.d.ts +99 -28
- package/list/lib/list.js +213 -112
- package/list/lib/list.js.map +1 -1
- package/list/lib/listitem/_list-item.scss +122 -56
- package/list/lib/listitem/harness.js +2 -1
- package/list/lib/listitem/harness.js.map +1 -1
- package/list/lib/listitem/list-item-private-styles.css.js +9 -0
- package/list/lib/listitem/list-item-private-styles.css.js.map +1 -0
- package/list/lib/listitem/list-item-private-styles.scss +10 -0
- 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-styles.scss +2 -0
- package/list/lib/listitem/list-item.d.ts +99 -43
- package/list/lib/listitem/list-item.js +204 -173
- package/list/lib/listitem/list-item.js.map +1 -1
- package/list/lib/listitemlink/list-item-link.d.ts +17 -0
- package/list/lib/listitemlink/list-item-link.js +42 -0
- package/list/lib/listitemlink/list-item-link.js.map +1 -0
- package/list/lib/video/_list-item-video.scss +15 -5
- package/list/lib/video/list-item-video-styles.css.js +1 -1
- package/list/lib/video/list-item-video-styles.css.js.map +1 -1
- package/list/lib/video/list-item-video-styles.scss +2 -0
- package/list/lib/video/list-item-video.d.ts +43 -4
- package/list/lib/video/list-item-video.js +90 -12
- package/list/lib/video/list-item-video.js.map +1 -1
- package/list/list-item-avatar.d.ts +2 -1
- package/list/list-item-avatar.js +2 -1
- package/list/list-item-avatar.js.map +1 -1
- package/list/list-item-icon.d.ts +2 -1
- package/list/list-item-icon.js +2 -1
- package/list/list-item-icon.js.map +1 -1
- package/list/list-item-image.d.ts +2 -1
- package/list/list-item-image.js +2 -1
- package/list/list-item-image.js.map +1 -1
- package/list/list-item-link.d.ts +35 -0
- package/list/list-item-link.js +39 -0
- package/list/list-item-link.js.map +1 -0
- package/list/list-item-video.d.ts +2 -1
- package/list/list-item-video.js +2 -1
- package/list/list-item-video.js.map +1 -1
- package/list/list-item.d.ts +18 -2
- package/list/list-item.js +20 -3
- package/list/list-item.js.map +1 -1
- package/list/list.d.ts +15 -1
- package/list/list.js +15 -1
- package/list/list.js.map +1 -1
- package/menu/_menu-item.scss +6 -0
- package/menu/_menu.scss +6 -0
- package/menu/harness.d.ts +5 -0
- package/menu/harness.js +22 -0
- package/menu/harness.js.map +1 -1
- package/menu/lib/_menu.scss +64 -62
- package/menu/lib/menu-styles.css.js +1 -1
- package/menu/lib/menu-styles.css.js.map +1 -1
- package/menu/lib/menu-styles.scss +2 -0
- package/menu/lib/menu.d.ts +177 -43
- package/menu/lib/menu.js +506 -246
- package/menu/lib/menu.js.map +1 -1
- package/menu/lib/menuitem/_menu-item.scss +123 -0
- package/menu/lib/menuitem/menu-item-private-styles.css.js +9 -0
- package/menu/lib/menuitem/menu-item-private-styles.css.js.map +1 -0
- package/menu/lib/menuitem/menu-item-private-styles.scss +10 -0
- package/menu/lib/menuitem/menu-item-styles.css.d.ts +1 -0
- package/menu/lib/menuitem/menu-item-styles.css.js +9 -0
- package/menu/lib/menuitem/menu-item-styles.css.js.map +1 -0
- package/menu/lib/menuitem/menu-item-styles.scss +10 -0
- package/menu/lib/menuitem/menu-item.d.ts +20 -3
- package/menu/lib/menuitem/menu-item.js +42 -3
- package/menu/lib/menuitem/menu-item.js.map +1 -1
- package/menu/lib/menuitemlink/menu-item-link.d.ts +25 -0
- package/menu/lib/menuitemlink/menu-item-link.js +51 -0
- package/menu/lib/menuitemlink/menu-item-link.js.map +1 -0
- package/menu/lib/shared.d.ts +134 -0
- package/menu/lib/shared.js +85 -0
- package/menu/lib/shared.js.map +1 -0
- package/menu/lib/submenuitem/harness.d.ts +11 -0
- package/menu/lib/submenuitem/harness.js +12 -0
- package/menu/lib/submenuitem/harness.js.map +1 -0
- package/menu/lib/submenuitem/sub-menu-item.d.ts +89 -0
- package/menu/lib/submenuitem/sub-menu-item.js +266 -0
- package/menu/lib/submenuitem/sub-menu-item.js.map +1 -0
- package/menu/lib/surfacePositionController.d.ts +117 -0
- package/menu/lib/surfacePositionController.js +196 -0
- package/menu/lib/surfacePositionController.js.map +1 -0
- package/menu/lib/typeaheadController.d.ts +144 -0
- package/menu/lib/typeaheadController.js +242 -0
- package/menu/lib/typeaheadController.js.map +1 -0
- package/menu/menu-item-link.d.ts +33 -0
- package/menu/menu-item-link.js +37 -0
- package/menu/menu-item-link.js.map +1 -0
- package/menu/menu-item.d.ts +19 -2
- package/menu/menu-item.js +22 -4
- package/menu/menu-item.js.map +1 -1
- package/menu/menu.d.ts +45 -0
- package/menu/menu.js +43 -0
- package/menu/menu.js.map +1 -1
- package/menu/sub-menu-item.d.ts +60 -0
- package/menu/sub-menu-item.js +64 -0
- package/menu/sub-menu-item.js.map +1 -0
- package/menusurface/lib/_md-comp-menu-surface.scss +4 -0
- package/menusurface/lib/_menu-surface.scss +5 -1
- package/menusurface/lib/foundation.js +31 -31
- package/menusurface/lib/foundation.js.map +1 -1
- package/menusurface/lib/menu-surface-styles.css.js +1 -1
- package/menusurface/lib/menu-surface-styles.css.js.map +1 -1
- package/menusurface/lib/menu-surface-styles.scss +2 -0
- package/menusurface/lib/menu-surface.d.ts +2 -2
- package/menusurface/lib/menu-surface.js.map +1 -1
- package/menusurface/menu-surface.js.map +1 -1
- package/motion/animation.d.ts +20 -3
- package/motion/animation.js +39 -4
- package/motion/animation.js.map +1 -1
- package/navigationbar/lib/_navigation-bar.scss +11 -9
- package/navigationbar/lib/constants.d.ts +1 -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-styles.scss +2 -0
- package/navigationbar/lib/navigation-bar.js.map +1 -1
- package/navigationbar/navigation-bar.js.map +1 -1
- package/navigationdrawer/lib/_navigation-drawer-modal.scss +11 -2
- package/navigationdrawer/lib/_navigation-drawer.scss +11 -6
- package/navigationdrawer/lib/_shared.scss +4 -8
- package/navigationdrawer/lib/navigation-drawer-modal-styles.css.js +1 -1
- package/navigationdrawer/lib/navigation-drawer-modal-styles.css.js.map +1 -1
- package/navigationdrawer/lib/navigation-drawer-modal-styles.scss +2 -0
- package/navigationdrawer/lib/navigation-drawer-modal.js.map +1 -1
- package/navigationdrawer/lib/navigation-drawer-styles.css.js +1 -1
- package/navigationdrawer/lib/navigation-drawer-styles.css.js.map +1 -1
- package/navigationdrawer/lib/navigation-drawer-styles.scss +2 -0
- package/navigationdrawer/lib/navigation-drawer.js.map +1 -1
- package/navigationdrawer/lib/shared-styles.scss +2 -0
- package/navigationdrawer/navigation-drawer-modal.js.map +1 -1
- package/navigationdrawer/navigation-drawer.js.map +1 -1
- package/navigationtab/lib/_navigation-tab.scss +34 -41
- package/navigationtab/lib/navigation-tab-styles.css.js +1 -1
- package/navigationtab/lib/navigation-tab-styles.css.js.map +1 -1
- package/navigationtab/lib/navigation-tab-styles.scss +2 -0
- package/navigationtab/lib/navigation-tab.js +4 -4
- package/navigationtab/lib/navigation-tab.js.map +1 -1
- package/navigationtab/navigation-tab.js.map +1 -1
- package/package.json +2 -9
- package/radio/lib/_radio.scss +16 -15
- package/radio/lib/forced-colors-styles.scss +2 -0
- package/radio/lib/radio-styles.css.js +1 -1
- package/radio/lib/radio-styles.css.js.map +1 -1
- package/radio/lib/radio-styles.scss +2 -0
- package/radio/lib/radio.d.ts +10 -1
- package/radio/lib/radio.js +28 -19
- package/radio/lib/radio.js.map +1 -1
- package/radio/radio.d.ts +16 -1
- package/radio/radio.js +16 -1
- package/radio/radio.js.map +1 -1
- package/ripple/directive.d.ts +1 -33
- package/ripple/directive.js +7 -194
- package/ripple/directive.js.map +1 -1
- package/ripple/lib/_md-comp-ripple.scss +20 -19
- package/ripple/lib/_ripple.scss +24 -40
- package/ripple/lib/ripple-styles.css.js +1 -1
- package/ripple/lib/ripple-styles.css.js.map +1 -1
- package/ripple/lib/ripple-styles.scss +2 -0
- package/ripple/lib/ripple.d.ts +50 -48
- package/ripple/lib/ripple.js +215 -77
- package/ripple/lib/ripple.js.map +1 -1
- package/ripple/ripple.d.ts +9 -1
- package/ripple/ripple.js +9 -1
- package/ripple/ripple.js.map +1 -1
- package/sass/_assert.scss +2 -0
- package/sass/_color-scheme.scss +4 -0
- package/sass/_color.scss +4 -0
- package/sass/_elevation.scss +4 -0
- package/sass/_feature-flags.scss +2 -0
- package/sass/_map-ext.scss +26 -0
- package/sass/_resolvers.scss +4 -4
- package/sass/_shape.scss +75 -27
- package/sass/_string-ext.scss +67 -0
- package/sass/_theme.scss +4 -0
- package/sass/_typography.scss +18 -93
- package/sass/_var.scss +4 -0
- package/segmentedbutton/lib/_outlined-segmented-button.scss +4 -0
- package/segmentedbutton/lib/_shared.scss +18 -22
- package/segmentedbutton/lib/outlined-styles.css.js +1 -1
- package/segmentedbutton/lib/outlined-styles.css.js.map +1 -1
- package/segmentedbutton/lib/outlined-styles.scss +2 -0
- package/segmentedbutton/lib/segmented-button.js +4 -4
- package/segmentedbutton/lib/segmented-button.js.map +1 -1
- package/segmentedbutton/lib/shared-styles.css.js +1 -1
- package/segmentedbutton/lib/shared-styles.css.js.map +1 -1
- package/segmentedbutton/lib/shared-styles.scss +2 -0
- package/segmentedbutton/outlined-segmented-button.js.map +1 -1
- package/segmentedbuttonset/lib/_outlined-segmented-button-set.scss +9 -5
- package/segmentedbuttonset/lib/_shared.scss +0 -13
- package/segmentedbuttonset/lib/outlined-styles.css.js +1 -1
- package/segmentedbuttonset/lib/outlined-styles.css.js.map +1 -1
- package/segmentedbuttonset/lib/outlined-styles.scss +2 -0
- package/segmentedbuttonset/lib/segmented-button-set.d.ts +0 -2
- package/segmentedbuttonset/lib/segmented-button-set.js +0 -2
- package/segmentedbuttonset/lib/segmented-button-set.js.map +1 -1
- package/segmentedbuttonset/lib/shared-styles.scss +2 -0
- package/segmentedbuttonset/outlined-segmented-button-set.js.map +1 -1
- package/slider/_slider.scss +6 -0
- package/slider/harness.d.ts +20 -0
- package/slider/harness.js +63 -0
- package/slider/harness.js.map +1 -0
- package/slider/lib/_slider.scss +503 -0
- package/slider/lib/_tokens.scss +66 -0
- package/slider/lib/forced-colors-styles.css.d.ts +1 -0
- package/slider/lib/forced-colors-styles.css.js +9 -0
- package/slider/lib/forced-colors-styles.css.js.map +1 -0
- package/slider/lib/forced-colors-styles.scss +53 -0
- package/slider/lib/slider-styles.css.d.ts +1 -0
- package/slider/lib/slider-styles.css.js +9 -0
- package/slider/lib/slider-styles.css.js.map +1 -0
- package/slider/lib/slider-styles.scss +8 -0
- package/slider/lib/slider.d.ts +158 -0
- package/slider/lib/slider.js +575 -0
- package/slider/lib/slider.js.map +1 -0
- package/slider/slider.d.ts +28 -0
- package/slider/slider.js +32 -0
- package/slider/slider.js.map +1 -0
- package/switch/lib/README.md +55 -0
- package/switch/lib/_handle.scss +72 -26
- package/switch/lib/_icon.scss +40 -0
- package/switch/lib/_switch.scss +12 -133
- package/switch/lib/_track.scss +41 -0
- package/switch/lib/switch-styles.css.js +1 -1
- package/switch/lib/switch-styles.css.js.map +1 -1
- package/switch/lib/switch-styles.scss +2 -0
- package/switch/lib/switch.d.ts +3 -0
- package/switch/lib/switch.js +12 -9
- package/switch/lib/switch.js.map +1 -1
- package/switch/switch.js.map +1 -1
- package/textfield/filled-text-field.d.ts +1 -1
- package/textfield/filled-text-field.js +1 -2
- package/textfield/filled-text-field.js.map +1 -1
- package/textfield/harness.js +1 -1
- package/textfield/harness.js.map +1 -1
- package/textfield/lib/_filled-text-field.scss +29 -23
- package/textfield/lib/_icon.scss +41 -56
- package/textfield/lib/_input.scss +17 -36
- package/textfield/lib/_outlined-text-field.scss +29 -23
- package/textfield/lib/_shared.scss +10 -29
- package/textfield/lib/filled-forced-colors-styles.scss +2 -0
- package/textfield/lib/filled-styles.css.js +1 -1
- package/textfield/lib/filled-styles.css.js.map +1 -1
- package/textfield/lib/filled-styles.scss +2 -0
- package/textfield/lib/filled-text-field.d.ts +6 -5
- package/textfield/lib/filled-text-field.js +8 -7
- package/textfield/lib/filled-text-field.js.map +1 -1
- package/textfield/lib/outlined-forced-colors-styles.scss +2 -0
- package/textfield/lib/outlined-styles.css.js +1 -1
- package/textfield/lib/outlined-styles.css.js.map +1 -1
- package/textfield/lib/outlined-styles.scss +2 -0
- package/textfield/lib/outlined-text-field.d.ts +6 -5
- package/textfield/lib/outlined-text-field.js +8 -7
- package/textfield/lib/outlined-text-field.js.map +1 -1
- package/textfield/lib/shared-styles.css.js +1 -1
- package/textfield/lib/shared-styles.css.js.map +1 -1
- package/textfield/lib/shared-styles.scss +2 -0
- package/textfield/lib/text-field.d.ts +40 -90
- package/textfield/lib/text-field.js +194 -272
- package/textfield/lib/text-field.js.map +1 -1
- package/textfield/outlined-text-field.d.ts +1 -1
- package/textfield/outlined-text-field.js +1 -2
- package/textfield/outlined-text-field.js.map +1 -1
- package/tokens/_index.scss +1 -1
- package/tokens/{v0_150 → v0_160}/_index.scss +1 -1
- package/tokens/{v0_150 → v0_160}/_md-comp-assist-chip.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-badge.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-banner.scss +2 -43
- package/tokens/{v0_150 → v0_160}/_md-comp-bottom-app-bar.scss +3 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-carousel-item.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-checkbox.scss +5 -26
- package/tokens/{v0_150 → v0_160}/_md-comp-circular-progress-indicator.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-data-table.scss +2 -6
- package/tokens/{v0_150 → v0_160}/_md-comp-date-input-modal.scss +11 -11
- package/tokens/{v0_150 → v0_160}/_md-comp-date-picker-docked.scss +24 -24
- package/tokens/{v0_150 → v0_160}/_md-comp-date-picker-modal.scss +35 -35
- package/tokens/{v0_150 → v0_160}/_md-comp-dialog.scss +2 -25
- package/tokens/{v0_150 → v0_160}/_md-comp-divider.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-elevated-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-elevated-card.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-branded.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-primary.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-secondary.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-surface.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-extended-fab-tertiary.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-branded-large.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-branded.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-primary-large.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-primary-small.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-primary.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-secondary-large.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-secondary-small.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-secondary.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-surface-large.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-surface-small.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-surface.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-tertiary-large.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-tertiary-small.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-fab-tertiary.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-autocomplete.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-button.scss +2 -8
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-card.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-icon-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-menu-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-select.scss +2 -6
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-text-field.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-tonal-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-filled-tonal-icon-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-filter-chip.scss +2 -30
- package/tokens/{v0_150 → v0_160}/_md-comp-full-screen-dialog.scss +3 -53
- package/tokens/{v0_150 → v0_160}/_md-comp-icon-button.scss +3 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-input-chip.scss +2 -52
- package/tokens/{v0_150 → v0_160}/_md-comp-linear-progress-indicator.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-list.scss +3 -12
- package/tokens/{v0_150 → v0_160}/_md-comp-menu.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-navigation-bar.scss +2 -9
- package/tokens/{v0_150 → v0_160}/_md-comp-navigation-drawer.scss +2 -8
- package/tokens/{v0_150 → v0_160}/_md-comp-navigation-rail.scss +2 -39
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-autocomplete.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-button.scss +2 -6
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-card.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-icon-button.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-menu-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-segmented-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-select.scss +2 -6
- package/tokens/{v0_150 → v0_160}/_md-comp-outlined-text-field.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-plain-tooltip.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-primary-navigation-tab.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-radio-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-rich-tooltip.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-scrim.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-search-bar.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-search-view.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-secondary-navigation-tab.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-sheet-bottom.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-sheet-floating.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-sheet-side.scss +13 -11
- package/tokens/{v0_150 → v0_160}/_md-comp-slider.scss +2 -4
- package/tokens/{v0_150 → v0_160}/_md-comp-snackbar.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-standard-menu-button.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-suggestion-chip.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-switch.scss +2 -11
- package/tokens/{v0_150 → v0_160}/_md-comp-text-button.scss +2 -6
- package/tokens/{v0_150 → v0_160}/_md-comp-time-input.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-time-picker.scss +2 -5
- package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-large.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-medium.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-small-centered.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-comp-top-app-bar-small.scss +2 -3
- package/tokens/{v0_150 → v0_160}/_md-ref-palette.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-ref-typeface.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-sys-color.scss +218 -20
- package/tokens/{v0_150 → v0_160}/_md-sys-elevation.scss +4 -13
- package/tokens/{v0_150 → v0_160}/_md-sys-motion.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-sys-shape.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-sys-state.scss +2 -2
- package/tokens/{v0_150 → v0_160}/_md-sys-typescale.scss +2 -3
- package/tokens/v0_160/index.test.css.d.ts +1 -0
- package/tokens/{v0_150 → v0_160}/index.test.scss +1 -1
- package/tokens/v0_160/lib.test.css.d.ts +1 -0
- package/tokens/{v0_150 → v0_160}/lib.test.scss +1 -1
- package/list/lib/_tokens.scss +0 -80
- package/list/lib/divider/_list-divider.scss +0 -46
- package/list/lib/divider/list-divider-styles.css.js +0 -9
- package/list/lib/divider/list-divider-styles.css.js.map +0 -1
- package/list/lib/divider/list-divider-styles.scss +0 -8
- package/list/lib/divider/list-divider.d.ts +0 -13
- package/list/lib/divider/list-divider.js +0 -32
- package/list/lib/divider/list-divider.js.map +0 -1
- package/list/list-divider.d.ts +0 -19
- package/list/list-divider.js +0 -22
- package/list/list-divider.js.map +0 -1
- package/menu/lib/_menu-button.scss +0 -14
- package/menu/lib/adapter.d.ts +0 -66
- package/menu/lib/adapter.js +0 -7
- package/menu/lib/adapter.js.map +0 -1
- package/menu/lib/constants.d.ts +0 -22
- package/menu/lib/constants.js +0 -23
- package/menu/lib/constants.js.map +0 -1
- package/menu/lib/foundation.d.ts +0 -49
- package/menu/lib/foundation.js +0 -123
- package/menu/lib/foundation.js.map +0 -1
- package/menu/lib/menu-button-styles.css.js +0 -9
- package/menu/lib/menu-button-styles.css.js.map +0 -1
- package/menu/lib/menu-button-styles.scss +0 -8
- package/menu/lib/menu-button.d.ts +0 -27
- package/menu/lib/menu-button.js +0 -93
- package/menu/lib/menu-button.js.map +0 -1
- package/menu/menu-button.d.ts +0 -14
- package/menu/menu-button.js +0 -17
- package/menu/menu-button.js.map +0 -1
- /package/{list/lib/divider/list-divider-styles.css.d.ts → dialog/lib/dialog-styles.css.d.ts} +0 -0
- /package/{menu/lib/menu-button-styles.css.d.ts → divider/lib/divider-styles.css.d.ts} +0 -0
- /package/{tokens/v0_150/index.test.css.d.ts → list/lib/listitem/list-item-private-styles.css.d.ts} +0 -0
- /package/{tokens/v0_150/lib.test.css.d.ts → menu/lib/menuitem/menu-item-private-styles.css.d.ts} +0 -0
- /package/tokens/{v0_150 → v0_160}/index.test.css.js +0 -0
- /package/tokens/{v0_150 → v0_160}/index.test.css.js.map +0 -0
- /package/tokens/{v0_150 → v0_160}/lib.test.css.js +0 -0
- /package/tokens/{v0_150 → v0_160}/lib.test.css.js.map +0 -0
package/ripple/directive.js
CHANGED
|
@@ -5,65 +5,10 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { noChange } from 'lit';
|
|
7
7
|
import { Directive, directive, PartType } from 'lit/directive.js';
|
|
8
|
-
/**
|
|
9
|
-
* Delay reacting to touch so that we do not show the ripple for a swipe or
|
|
10
|
-
* scroll interaction.
|
|
11
|
-
*/
|
|
12
|
-
const TOUCH_DELAY_MS = 150;
|
|
13
|
-
/**
|
|
14
|
-
* Interaction states for the ripple.
|
|
15
|
-
*
|
|
16
|
-
* On Touch:
|
|
17
|
-
* - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`
|
|
18
|
-
* - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`
|
|
19
|
-
*
|
|
20
|
-
* On Mouse or Pen:
|
|
21
|
-
* - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`
|
|
22
|
-
*/
|
|
23
|
-
var State;
|
|
24
|
-
(function (State) {
|
|
25
|
-
/**
|
|
26
|
-
* Initial state of the control, no touch in progress.
|
|
27
|
-
*
|
|
28
|
-
* Transitions:
|
|
29
|
-
* - on touch down: transition to `TOUCH_DELAY`.
|
|
30
|
-
* - on mouse down: transition to `WAITING_FOR_CLICK`.
|
|
31
|
-
*/
|
|
32
|
-
State[State["INACTIVE"] = 0] = "INACTIVE";
|
|
33
|
-
/**
|
|
34
|
-
* Touch down has been received, waiting to determine if it's a swipe or
|
|
35
|
-
* scroll.
|
|
36
|
-
*
|
|
37
|
-
* Transitions:
|
|
38
|
-
* - on touch up: beginPress(); transition to `WAITING_FOR_CLICK`.
|
|
39
|
-
* - on cancel: transition to `INACTIVE`.
|
|
40
|
-
* - after `TOUCH_DELAY_MS`: beginPress(); transition to `HOLDING`.
|
|
41
|
-
*/
|
|
42
|
-
State[State["TOUCH_DELAY"] = 1] = "TOUCH_DELAY";
|
|
43
|
-
/**
|
|
44
|
-
* A touch has been deemed to be a press
|
|
45
|
-
*
|
|
46
|
-
* Transitions:
|
|
47
|
-
* - on up: transition to `WAITING_FOR_CLICK`.
|
|
48
|
-
*/
|
|
49
|
-
State[State["HOLDING"] = 2] = "HOLDING";
|
|
50
|
-
/**
|
|
51
|
-
* The user touch has finished, transition into rest state.
|
|
52
|
-
*
|
|
53
|
-
* Transitions:
|
|
54
|
-
* - on click endPress(); transition to `INACTIVE`.
|
|
55
|
-
*/
|
|
56
|
-
State[State["WAITING_FOR_CLICK"] = 3] = "WAITING_FOR_CLICK";
|
|
57
|
-
})(State || (State = {}));
|
|
58
8
|
class RippleDirective extends Directive {
|
|
59
9
|
constructor(partInfo) {
|
|
60
10
|
super(partInfo);
|
|
61
11
|
this.rippleGetter = async () => null;
|
|
62
|
-
this.state = State.INACTIVE;
|
|
63
|
-
this.checkBoundsAfterContextMenu = false;
|
|
64
|
-
this.rippleStartEvent = null;
|
|
65
|
-
this.touchTimer = null;
|
|
66
|
-
this.clickTimer = null;
|
|
67
12
|
if (partInfo.type !== PartType.ELEMENT) {
|
|
68
13
|
throw new Error('The `ripple` directive must be used on an element');
|
|
69
14
|
}
|
|
@@ -80,25 +25,25 @@ class RippleDirective extends Directive {
|
|
|
80
25
|
}
|
|
81
26
|
switch (event.type) {
|
|
82
27
|
case 'click':
|
|
83
|
-
|
|
28
|
+
ripple.handleClick();
|
|
84
29
|
break;
|
|
85
30
|
case 'contextmenu':
|
|
86
|
-
|
|
31
|
+
ripple.handleContextmenu();
|
|
87
32
|
break;
|
|
88
33
|
case 'pointercancel':
|
|
89
|
-
|
|
34
|
+
ripple.handlePointercancel(event);
|
|
90
35
|
break;
|
|
91
36
|
case 'pointerdown':
|
|
92
|
-
|
|
37
|
+
await ripple.handlePointerdown(event);
|
|
93
38
|
break;
|
|
94
39
|
case 'pointerenter':
|
|
95
|
-
|
|
40
|
+
ripple.handlePointerenter(event);
|
|
96
41
|
break;
|
|
97
42
|
case 'pointerleave':
|
|
98
|
-
|
|
43
|
+
ripple.handlePointerleave(event);
|
|
99
44
|
break;
|
|
100
45
|
case 'pointerup':
|
|
101
|
-
|
|
46
|
+
ripple.handlePointerup(event);
|
|
102
47
|
break;
|
|
103
48
|
default:
|
|
104
49
|
break;
|
|
@@ -121,138 +66,6 @@ class RippleDirective extends Directive {
|
|
|
121
66
|
this.rippleGetter = typeof ripple === 'function' ? ripple : () => ripple;
|
|
122
67
|
return noChange;
|
|
123
68
|
}
|
|
124
|
-
/**
|
|
125
|
-
* Returns `true` if
|
|
126
|
-
* - the ripple element is enabled
|
|
127
|
-
* - the pointer is primary for the input type
|
|
128
|
-
* - the pointer is the pointer that started the interaction, or will start
|
|
129
|
-
* the interaction
|
|
130
|
-
* - the pointer is a touch, or the pointer state has the primary button
|
|
131
|
-
* held, or the pointer is hovering
|
|
132
|
-
*/
|
|
133
|
-
shouldReactToEvent(ripple, ev, hovering = false) {
|
|
134
|
-
const enabled = !ripple.disabled;
|
|
135
|
-
const isPrimaryPointer = ev.isPrimary;
|
|
136
|
-
const isInteractionPointer = this.rippleStartEvent === null ||
|
|
137
|
-
this.rippleStartEvent.pointerId === ev.pointerId;
|
|
138
|
-
const isPrimaryButton = ev.buttons === 1;
|
|
139
|
-
return enabled && isPrimaryPointer && isInteractionPointer &&
|
|
140
|
-
(this.isTouch(ev) || isPrimaryButton || hovering);
|
|
141
|
-
}
|
|
142
|
-
isTouch({ pointerType }) {
|
|
143
|
-
return pointerType === 'touch';
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Check if the event is within the bounds of the element.
|
|
147
|
-
*
|
|
148
|
-
* This is only needed for the "stuck" contextmenu longpress on Chrome.
|
|
149
|
-
*/
|
|
150
|
-
inBounds({ x, y }) {
|
|
151
|
-
const { top, left, bottom, right } = this.element.getBoundingClientRect();
|
|
152
|
-
return x >= left && x <= right && y >= top && y <= bottom;
|
|
153
|
-
}
|
|
154
|
-
beginPress(ripple) {
|
|
155
|
-
ripple.beginPress(this.rippleStartEvent);
|
|
156
|
-
}
|
|
157
|
-
endPress(ripple) {
|
|
158
|
-
ripple.endPress();
|
|
159
|
-
this.state = State.INACTIVE;
|
|
160
|
-
this.rippleStartEvent = null;
|
|
161
|
-
if (this.touchTimer) {
|
|
162
|
-
clearTimeout(this.touchTimer);
|
|
163
|
-
this.touchTimer = null;
|
|
164
|
-
}
|
|
165
|
-
if (this.clickTimer) {
|
|
166
|
-
clearTimeout(this.clickTimer);
|
|
167
|
-
this.clickTimer = null;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
waitForTouchHold() {
|
|
171
|
-
if (this.touchTimer !== null) {
|
|
172
|
-
clearTimeout(this.touchTimer);
|
|
173
|
-
}
|
|
174
|
-
this.state = State.TOUCH_DELAY;
|
|
175
|
-
this.touchTimer = setTimeout(async () => {
|
|
176
|
-
const ripple = await this.rippleGetter();
|
|
177
|
-
if (ripple === null || this.state !== State.TOUCH_DELAY) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
this.state = State.HOLDING;
|
|
181
|
-
this.beginPress(ripple);
|
|
182
|
-
}, TOUCH_DELAY_MS);
|
|
183
|
-
}
|
|
184
|
-
click(ripple) {
|
|
185
|
-
// Click is a MouseEvent in Firefox and Safari, so we cannot use
|
|
186
|
-
// `shouldReactToEvent`
|
|
187
|
-
if (ripple.disabled) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
if (this.state === State.WAITING_FOR_CLICK) {
|
|
191
|
-
this.endPress(ripple);
|
|
192
|
-
}
|
|
193
|
-
else if (this.state === State.INACTIVE) {
|
|
194
|
-
// keyboard synthesized click event
|
|
195
|
-
this.beginPress(ripple);
|
|
196
|
-
this.endPress(ripple);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
contextMenu(ripple) {
|
|
200
|
-
if (!ripple.disabled) {
|
|
201
|
-
this.checkBoundsAfterContextMenu = true;
|
|
202
|
-
this.endPress(ripple);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
pointerDown(ripple, ev) {
|
|
206
|
-
if (!this.shouldReactToEvent(ripple, ev)) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
this.rippleStartEvent = ev;
|
|
210
|
-
if (this.isTouch(ev)) {
|
|
211
|
-
// after a longpress contextmenu event, an extra `pointerdown` can be
|
|
212
|
-
// dispatched to the pressed element. Check that the down is within
|
|
213
|
-
// bounds of the element in this case.
|
|
214
|
-
if (this.checkBoundsAfterContextMenu && !this.inBounds(ev)) {
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
this.checkBoundsAfterContextMenu = false;
|
|
218
|
-
this.waitForTouchHold();
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
this.state = State.WAITING_FOR_CLICK;
|
|
222
|
-
this.beginPress(ripple);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
pointerUp(ripple, ev) {
|
|
226
|
-
if (!this.isTouch(ev) || !this.shouldReactToEvent(ripple, ev)) {
|
|
227
|
-
return;
|
|
228
|
-
}
|
|
229
|
-
if (this.state === State.HOLDING) {
|
|
230
|
-
this.state = State.WAITING_FOR_CLICK;
|
|
231
|
-
}
|
|
232
|
-
else if (this.state === State.TOUCH_DELAY) {
|
|
233
|
-
this.state = State.WAITING_FOR_CLICK;
|
|
234
|
-
this.beginPress(ripple);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
pointerCancel(ripple, ev) {
|
|
238
|
-
if (this.shouldReactToEvent(ripple, ev)) {
|
|
239
|
-
this.endPress(ripple);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
pointerEnter(ripple, ev) {
|
|
243
|
-
if (this.shouldReactToEvent(ripple, ev, true)) {
|
|
244
|
-
ripple.beginHover(ev);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
pointerLeave(ripple, ev) {
|
|
248
|
-
if (this.shouldReactToEvent(ripple, ev, true)) {
|
|
249
|
-
ripple.endHover();
|
|
250
|
-
// release a held mouse or pen press that moves outside the element
|
|
251
|
-
if (!this.isTouch(ev) && this.state !== State.INACTIVE) {
|
|
252
|
-
this.endPress(ripple);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
69
|
}
|
|
257
70
|
/**
|
|
258
71
|
* Connects a Ripple element to a node that drives the interaction
|
package/ripple/directive.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directive.js","sourceRoot":"","sources":["directive.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {noChange} from 'lit';\nimport {Directive, directive, DirectiveParameters, ElementPart, PartInfo, PartType} from 'lit/directive.js';\n\nimport {Ripple} from './lib/ripple.js';\n\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nenum State {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n INACTIVE,\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: beginPress(); transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: beginPress(); transition to `HOLDING`.\n */\n TOUCH_DELAY,\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n HOLDING,\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click endPress(); transition to `INACTIVE`.\n */\n WAITING_FOR_CLICK\n}\n\n/**\n * Normalized ripple accessor type.\n *\n * Use with `await rippleFunction()`\n */\ntype RippleFunction = () => Ripple|null|Promise<Ripple|null>;\n\nclass RippleDirective extends Directive {\n private rippleGetter: RippleFunction = async () => null;\n private element?: HTMLElement;\n private state: State = State.INACTIVE;\n private checkBoundsAfterContextMenu = false;\n private rippleStartEvent: PointerEvent|null = null;\n private touchTimer: number|null = null;\n private clickTimer: number|null = null;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('The `ripple` directive must be used on an element');\n }\n }\n\n render(ripple: RippleFunction|Promise<Ripple|null>) {\n return noChange;\n }\n\n // Use EventListenerObject::handleEvent interface to handle events without\n // generating bound event handlers\n async handleEvent(event: Event) {\n const ripple = await this.rippleGetter();\n if (!ripple) {\n return;\n }\n switch (event.type) {\n case 'click':\n this.click(ripple);\n break;\n case 'contextmenu':\n this.contextMenu(ripple);\n break;\n case 'pointercancel':\n this.pointerCancel(ripple, event as PointerEvent);\n break;\n case 'pointerdown':\n this.pointerDown(ripple, event as PointerEvent);\n break;\n case 'pointerenter':\n this.pointerEnter(ripple, event as PointerEvent);\n break;\n case 'pointerleave':\n this.pointerLeave(ripple, event as PointerEvent);\n break;\n case 'pointerup':\n this.pointerUp(ripple, event as PointerEvent);\n break;\n default:\n break;\n }\n }\n\n override update(part: ElementPart, [ripple]: DirectiveParameters<this>) {\n if (!this.element) {\n // NOTE: addEventListener typing needs to be used with HTMLElements or a\n // subclass\n this.element = part.element as HTMLElement;\n this.element.addEventListener('click', this);\n this.element.addEventListener('contextmenu', this);\n this.element.addEventListener('pointercancel', this);\n this.element.addEventListener('pointerdown', this);\n this.element.addEventListener('pointerenter', this);\n this.element.addEventListener('pointerleave', this);\n this.element.addEventListener('pointerup', this);\n }\n // Normalize given ripple accessor\n this.rippleGetter = typeof ripple === 'function' ? ripple : () => ripple;\n return noChange;\n }\n\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n private shouldReactToEvent(\n ripple: Ripple, ev: PointerEvent, hovering = false) {\n const enabled = !ripple.disabled;\n const isPrimaryPointer = ev.isPrimary;\n const isInteractionPointer = this.rippleStartEvent === null ||\n this.rippleStartEvent.pointerId === ev.pointerId;\n const isPrimaryButton = ev.buttons === 1;\n return enabled && isPrimaryPointer && isInteractionPointer &&\n (this.isTouch(ev) || isPrimaryButton || hovering);\n }\n\n private isTouch({pointerType}: PointerEvent) {\n return pointerType === 'touch';\n }\n\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n private inBounds({x, y}: PointerEvent) {\n const {top, left, bottom, right} = this.element!.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n\n private beginPress(ripple: Ripple) {\n ripple.beginPress(this.rippleStartEvent);\n }\n\n private endPress(ripple: Ripple) {\n ripple.endPress();\n this.state = State.INACTIVE;\n this.rippleStartEvent = null;\n if (this.touchTimer) {\n clearTimeout(this.touchTimer);\n this.touchTimer = null;\n }\n if (this.clickTimer) {\n clearTimeout(this.clickTimer);\n this.clickTimer = null;\n }\n }\n\n private waitForTouchHold() {\n if (this.touchTimer !== null) {\n clearTimeout(this.touchTimer);\n }\n this.state = State.TOUCH_DELAY;\n this.touchTimer = setTimeout(async () => {\n const ripple = await this.rippleGetter();\n if (ripple === null || this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.beginPress(ripple);\n }, TOUCH_DELAY_MS);\n }\n\n private click(ripple: Ripple) {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (ripple.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPress(ripple);\n } else if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.beginPress(ripple);\n this.endPress(ripple);\n }\n }\n\n private contextMenu(ripple: Ripple) {\n if (!ripple.disabled) {\n this.checkBoundsAfterContextMenu = true;\n this.endPress(ripple);\n }\n }\n\n private pointerDown(ripple: Ripple, ev: PointerEvent) {\n if (!this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n this.rippleStartEvent = ev;\n if (this.isTouch(ev)) {\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(ev)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n this.waitForTouchHold();\n } else {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerUp(ripple: Ripple, ev: PointerEvent) {\n if (!this.isTouch(ev) || !this.shouldReactToEvent(ripple, ev)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n } else if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.beginPress(ripple);\n }\n }\n\n private pointerCancel(ripple: Ripple, ev: PointerEvent) {\n if (this.shouldReactToEvent(ripple, ev)) {\n this.endPress(ripple);\n }\n }\n\n private pointerEnter(ripple: Ripple, ev: PointerEvent) {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.beginHover(ev);\n }\n }\n\n private pointerLeave(ripple: Ripple, ev: PointerEvent) {\n if (this.shouldReactToEvent(ripple, ev, true)) {\n ripple.endHover();\n // release a held mouse or pen press that moves outside the element\n if (!this.isTouch(ev) && this.state !== State.INACTIVE) {\n this.endPress(ripple);\n }\n }\n }\n}\n\n/**\n * Connects a Ripple element to a node that drives the interaction\n *\n * @param rippleGetter A function that returns an `md-ripple` element\n * @param simulateKeyboardClick For elements that do not issue a click on\n * keyboard interaction, pass `true` to enable press animations on Enter or\n * Spacebar\n */\nexport const ripple = directive(RippleDirective);"]}
|
|
1
|
+
{"version":3,"file":"directive.js","sourceRoot":"","sources":["directive.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAC,SAAS,EAAE,SAAS,EAA8C,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAW5G,MAAM,eAAgB,SAAQ,SAAS;IAIrC,YAAY,QAAkB;QAC5B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAJV,iBAAY,GAAmB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC;QAKtD,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;SACtE;IACH,CAAC;IAED,MAAM,CAAC,MAA2C;QAChD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,kCAAkC;IAClC,KAAK,CAAC,WAAW,CAAC,KAAY;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,QAAQ,KAAK,CAAC,IAAI,EAAE;YAClB,KAAK,OAAO;gBACV,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,MAAM;YACR,KAAK,eAAe;gBAClB,MAAM,CAAC,mBAAmB,CAAC,KAAqB,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,MAAM,CAAC,iBAAiB,CAAC,KAAqB,CAAC,CAAC;gBACtD,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,kBAAkB,CAAC,KAAqB,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,kBAAkB,CAAC,KAAqB,CAAC,CAAC;gBACjD,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,CAAC,eAAe,CAAC,KAAqB,CAAC,CAAC;gBAC9C,MAAM;YACR;gBACE,MAAM;SACT;IACH,CAAC;IAEQ,MAAM,CAAC,IAAiB,EAAE,CAAC,MAAM,CAA4B;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,wEAAwE;YACxE,WAAW;YACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAsB,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;SAClD;QACD,kCAAkC;QAClC,IAAI,CAAC,YAAY,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QACzE,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {noChange} from 'lit';\nimport {Directive, directive, DirectiveParameters, ElementPart, PartInfo, PartType} from 'lit/directive.js';\n\nimport {Ripple} from './lib/ripple.js';\n\n/**\n * Normalized ripple accessor type.\n *\n * Use with `await rippleFunction()`\n */\ntype RippleFunction = () => Ripple|null|Promise<Ripple|null>;\n\nclass RippleDirective extends Directive {\n private rippleGetter: RippleFunction = async () => null;\n private element?: HTMLElement;\n\n constructor(partInfo: PartInfo) {\n super(partInfo);\n if (partInfo.type !== PartType.ELEMENT) {\n throw new Error('The `ripple` directive must be used on an element');\n }\n }\n\n render(ripple: RippleFunction|Promise<Ripple|null>) {\n return noChange;\n }\n\n // Use EventListenerObject::handleEvent interface to handle events without\n // generating bound event handlers\n async handleEvent(event: Event) {\n const ripple = await this.rippleGetter();\n if (!ripple) {\n return;\n }\n switch (event.type) {\n case 'click':\n ripple.handleClick();\n break;\n case 'contextmenu':\n ripple.handleContextmenu();\n break;\n case 'pointercancel':\n ripple.handlePointercancel(event as PointerEvent);\n break;\n case 'pointerdown':\n await ripple.handlePointerdown(event as PointerEvent);\n break;\n case 'pointerenter':\n ripple.handlePointerenter(event as PointerEvent);\n break;\n case 'pointerleave':\n ripple.handlePointerleave(event as PointerEvent);\n break;\n case 'pointerup':\n ripple.handlePointerup(event as PointerEvent);\n break;\n default:\n break;\n }\n }\n\n override update(part: ElementPart, [ripple]: DirectiveParameters<this>) {\n if (!this.element) {\n // NOTE: addEventListener typing needs to be used with HTMLElements or a\n // subclass\n this.element = part.element as HTMLElement;\n this.element.addEventListener('click', this);\n this.element.addEventListener('contextmenu', this);\n this.element.addEventListener('pointercancel', this);\n this.element.addEventListener('pointerdown', this);\n this.element.addEventListener('pointerenter', this);\n this.element.addEventListener('pointerleave', this);\n this.element.addEventListener('pointerup', this);\n }\n // Normalize given ripple accessor\n this.rippleGetter = typeof ripple === 'function' ? ripple : () => ripple;\n return noChange;\n }\n}\n\n/**\n * Connects a Ripple element to a node that drives the interaction\n *\n * @param rippleGetter A function that returns an `md-ripple` element\n * @param simulateKeyboardClick For elements that do not issue a click on\n * keyboard interaction, pass `true` to enable press animations on Enter or\n * Spacebar\n */\nexport const ripple = directive(RippleDirective);\n"]}
|
|
@@ -3,27 +3,28 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
//
|
|
5
5
|
|
|
6
|
+
// go/keep-sorted start
|
|
6
7
|
@use 'sass:map';
|
|
8
|
+
// go/keep-sorted end
|
|
9
|
+
// go/keep-sorted start
|
|
7
10
|
@use '../../tokens';
|
|
11
|
+
// go/keep-sorted end
|
|
8
12
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
);
|
|
15
|
-
$default-color: if($exclude-hardcoded-values, null, black);
|
|
16
|
-
// add missing tokens
|
|
17
|
-
$values: map.merge(
|
|
18
|
-
$state-values,
|
|
19
|
-
(
|
|
20
|
-
state-layer-shape: $default-shape,
|
|
21
|
-
focus-state-layer-color: $default-color,
|
|
22
|
-
hover-state-layer-color: $default-color,
|
|
23
|
-
pressed-state-layer-color: $default-color,
|
|
24
|
-
dragged-state-layer-color: $default-color,
|
|
25
|
-
)
|
|
26
|
-
);
|
|
13
|
+
$_default-deps: (
|
|
14
|
+
md-sys-color: tokens.md-sys-color-values-light(),
|
|
15
|
+
md-sys-shape: tokens.md-sys-shape-values(),
|
|
16
|
+
md-sys-state: tokens.md-sys-state-values(),
|
|
17
|
+
);
|
|
27
18
|
|
|
28
|
-
|
|
19
|
+
@function values($deps: $_default-deps) {
|
|
20
|
+
@return (
|
|
21
|
+
'focus-color': map.get($deps, 'md-sys-color', 'on-surface'),
|
|
22
|
+
'focus-opacity': map.get($deps, 'md-sys-state', 'focus-state-layer-opacity'),
|
|
23
|
+
'hover-color': map.get($deps, 'md-sys-color', 'on-surface'),
|
|
24
|
+
'hover-opacity': map.get($deps, 'md-sys-state', 'hover-state-layer-opacity'),
|
|
25
|
+
'pressed-color': map.get($deps, 'md-sys-color', 'on-surface'),
|
|
26
|
+
'pressed-opacity':
|
|
27
|
+
map.get($deps, 'md-sys-state', 'pressed-state-layer-opacity'),
|
|
28
|
+
'shape': map.get($deps, 'md-sys-shape', 'corner-none')
|
|
29
|
+
);
|
|
29
30
|
}
|
package/ripple/lib/_ripple.scss
CHANGED
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
//
|
|
5
5
|
|
|
6
|
-
//
|
|
7
|
-
// Selector '.md3-*' should only be used in this project.
|
|
8
|
-
|
|
6
|
+
// go/keep-sorted start
|
|
9
7
|
@use 'sass:map';
|
|
8
|
+
// go/keep-sorted end
|
|
9
|
+
// go/keep-sorted start
|
|
10
10
|
@use '../../sass/theme';
|
|
11
11
|
@use '../../tokens';
|
|
12
12
|
@use './md-comp-ripple';
|
|
13
|
+
// go/keep-sorted end
|
|
13
14
|
|
|
14
15
|
@mixin theme($tokens) {
|
|
15
16
|
$tokens: theme.validate-theme(md-comp-ripple.values(), $tokens);
|
|
@@ -37,15 +38,19 @@
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
:host,
|
|
40
|
-
.
|
|
41
|
+
.surface {
|
|
41
42
|
position: absolute;
|
|
42
43
|
inset: 0;
|
|
43
44
|
pointer-events: none;
|
|
44
45
|
overflow: hidden;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
.
|
|
48
|
-
|
|
48
|
+
.surface {
|
|
49
|
+
// TODO(https://bugs.webkit.org/show_bug.cgi?id=247546)
|
|
50
|
+
// Remove Safari workaround for incorrect ripple overflow when addressed.
|
|
51
|
+
// This addresses `hover` and `pressed` state oveflow.
|
|
52
|
+
will-change: transform;
|
|
53
|
+
border-radius: var(--_shape);
|
|
49
54
|
outline: none;
|
|
50
55
|
-webkit-tap-highlight-color: transparent;
|
|
51
56
|
|
|
@@ -58,7 +63,7 @@
|
|
|
58
63
|
}
|
|
59
64
|
|
|
60
65
|
&::before {
|
|
61
|
-
background-color: var(--_hover-
|
|
66
|
+
background-color: var(--_hover-color);
|
|
62
67
|
transition: opacity 15ms linear, background-color 15ms linear;
|
|
63
68
|
inset: 0;
|
|
64
69
|
}
|
|
@@ -67,7 +72,7 @@
|
|
|
67
72
|
// press ripple fade-out
|
|
68
73
|
background: radial-gradient(
|
|
69
74
|
closest-side,
|
|
70
|
-
var(--_pressed-
|
|
75
|
+
var(--_pressed-color) max(calc(100% - 70px), 65%),
|
|
71
76
|
transparent 100%
|
|
72
77
|
);
|
|
73
78
|
transition: opacity 375ms linear;
|
|
@@ -75,53 +80,32 @@
|
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
82
|
|
|
78
|
-
.
|
|
79
|
-
background-color: var(--_hover-
|
|
80
|
-
opacity: var(--_hover-
|
|
83
|
+
.hovered::before {
|
|
84
|
+
background-color: var(--_hover-color);
|
|
85
|
+
opacity: var(--_hover-opacity);
|
|
81
86
|
}
|
|
82
87
|
|
|
83
|
-
.
|
|
84
|
-
background-color: var(--_focus-
|
|
85
|
-
opacity: var(--_focus-
|
|
88
|
+
.focused::before {
|
|
89
|
+
background-color: var(--_focus-color);
|
|
90
|
+
opacity: var(--_focus-opacity);
|
|
86
91
|
transition-duration: 75ms;
|
|
87
92
|
}
|
|
88
93
|
|
|
89
|
-
.
|
|
94
|
+
.pressed::after {
|
|
90
95
|
// press ripple fade-in
|
|
91
|
-
opacity: var(--_pressed-
|
|
96
|
+
opacity: var(--_pressed-opacity);
|
|
92
97
|
transition-duration: 105ms;
|
|
93
98
|
}
|
|
94
99
|
|
|
95
|
-
|
|
96
|
-
// Remove Safari workaround for incorrect ripple overflow:
|
|
97
|
-
// setting shape token to `:host([unbounded])` so border-radius can be set
|
|
98
|
-
// only in this state.
|
|
99
|
-
// This addresses `hover` and `pressed` state oveflow.
|
|
100
|
-
.md3-ripple--unbounded,
|
|
101
|
-
:host([unbounded]) {
|
|
100
|
+
.unbounded {
|
|
102
101
|
$unbounded: (
|
|
103
|
-
|
|
102
|
+
shape: map.get(tokens.md-sys-shape-values(), 'corner-full'),
|
|
104
103
|
);
|
|
105
104
|
$unbounded: theme.create-theme-vars($unbounded, ripple);
|
|
106
105
|
|
|
107
|
-
--
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// TODO(https://bugs.webkit.org/show_bug.cgi?id=247546)
|
|
111
|
-
// Remove Safari workaround for incorrect ripple overflow when addressed.
|
|
112
|
-
// This addresses `hover` and `pressed` state oveflow.
|
|
113
|
-
:host([unbounded]) {
|
|
114
|
-
border-radius: var(--_state-layer-shape);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// TODO(https://bugs.webkit.org/show_bug.cgi?id=247546)
|
|
118
|
-
// Remove Safari workaround for incorrect ripple overflow when addressed.
|
|
119
|
-
// This addresses `during animation` state oveflow.
|
|
120
|
-
.md3-ripple--unbounded {
|
|
121
|
-
transform: scale(1);
|
|
106
|
+
--_shape: #{map.get($unbounded, 'shape')};
|
|
122
107
|
}
|
|
123
108
|
|
|
124
|
-
// TODO(b/230630968): create a forced-colors-mode mixin
|
|
125
109
|
@media screen and (forced-colors: active) {
|
|
126
110
|
:host {
|
|
127
111
|
display: none;
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { css } from 'lit';
|
|
7
|
-
export const styles = css `:host{--
|
|
7
|
+
export const styles = css `:host{--_focus-color: var(--md-ripple-focus-color, var(--md-sys-color-on-surface, #1c1b1f));--_focus-opacity: var(--md-ripple-focus-opacity, 0.12);--_hover-color: var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1c1b1f));--_hover-opacity: var(--md-ripple-hover-opacity, 0.08);--_pressed-color: var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1c1b1f));--_pressed-opacity: var(--md-ripple-pressed-opacity, 0.12);--_shape: var(--md-ripple-shape, 0px)}:host{display:flex}:host([disabled]){opacity:0}:host,.surface{position:absolute;inset:0;pointer-events:none;overflow:hidden}.surface{will-change:transform;border-radius:var(--_shape);outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{position:absolute;opacity:0;pointer-events:none;content:""}.surface::before{background-color:var(--_hover-color);transition:opacity 15ms linear,background-color 15ms linear;inset:0}.surface::after{background:radial-gradient(closest-side, var(--_pressed-color) max(100% - 70px, 65%), transparent 100%);transition:opacity 375ms linear;transform-origin:center center}.hovered::before{background-color:var(--_hover-color);opacity:var(--_hover-opacity)}.focused::before{background-color:var(--_focus-color);opacity:var(--_focus-opacity);transition-duration:75ms}.pressed::after{opacity:var(--_pressed-opacity);transition-duration:105ms}.unbounded{--_shape: var(--md-ripple-shape, 9999px)}@media screen and (forced-colors: active){:host{display:none}}/*# sourceMappingURL=ripple-styles.css.map */
|
|
8
8
|
`;
|
|
9
9
|
//# sourceMappingURL=ripple-styles.css.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ripple-styles.css.js","sourceRoot":"","sources":["ripple-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--
|
|
1
|
+
{"version":3,"file":"ripple-styles.css.js","sourceRoot":"","sources":["ripple-styles.css.ts"],"names":[],"mappings":"AAAA;;;;IAII;AACH,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;CACzB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n import {css} from 'lit';\n export const styles = css`:host{--_focus-color: var(--md-ripple-focus-color, var(--md-sys-color-on-surface, #1c1b1f));--_focus-opacity: var(--md-ripple-focus-opacity, 0.12);--_hover-color: var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1c1b1f));--_hover-opacity: var(--md-ripple-hover-opacity, 0.08);--_pressed-color: var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1c1b1f));--_pressed-opacity: var(--md-ripple-pressed-opacity, 0.12);--_shape: var(--md-ripple-shape, 0px)}:host{display:flex}:host([disabled]){opacity:0}:host,.surface{position:absolute;inset:0;pointer-events:none;overflow:hidden}.surface{will-change:transform;border-radius:var(--_shape);outline:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{position:absolute;opacity:0;pointer-events:none;content:\"\"}.surface::before{background-color:var(--_hover-color);transition:opacity 15ms linear,background-color 15ms linear;inset:0}.surface::after{background:radial-gradient(closest-side, var(--_pressed-color) max(100% - 70px, 65%), transparent 100%);transition:opacity 375ms linear;transform-origin:center center}.hovered::before{background-color:var(--_hover-color);opacity:var(--_hover-opacity)}.focused::before{background-color:var(--_focus-color);opacity:var(--_focus-opacity);transition-duration:75ms}.pressed::after{opacity:var(--_pressed-opacity);transition-duration:105ms}.unbounded{--_shape: var(--md-ripple-shape, 9999px)}@media screen and (forced-colors: active){:host{display:none}}/*# sourceMappingURL=ripple-styles.css.map */\n`;\n "]}
|
package/ripple/lib/ripple.d.ts
CHANGED
|
@@ -3,60 +3,62 @@
|
|
|
3
3
|
* Copyright 2022 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { LitElement, PropertyValues
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
7
|
+
/**
|
|
8
|
+
* A ripple component.
|
|
9
|
+
*/
|
|
9
10
|
export declare class Ripple extends LitElement {
|
|
10
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Sets the ripple to be an unbounded circle.
|
|
13
|
+
*/
|
|
11
14
|
unbounded: boolean;
|
|
12
|
-
disabled: boolean;
|
|
13
|
-
protected hovered: boolean;
|
|
14
|
-
protected focused: boolean;
|
|
15
|
-
protected pressed: boolean;
|
|
16
|
-
protected rippleSize: string;
|
|
17
|
-
protected rippleScale: string;
|
|
18
|
-
protected initialSize: number;
|
|
19
|
-
protected pressAnimationSignal: import("../../motion/animation.js").AnimationSignal;
|
|
20
|
-
protected growAnimation: Animation | null;
|
|
21
|
-
protected delayedEndPressHandle: number | null;
|
|
22
|
-
/** @soyTemplate */
|
|
23
|
-
protected render(): TemplateResult;
|
|
24
|
-
/** @soyTemplate */
|
|
25
|
-
protected getRenderRippleClasses(): ClassInfo;
|
|
26
|
-
protected update(changedProps: PropertyValues<this>): void;
|
|
27
|
-
protected getDimensions(): DOMRect;
|
|
28
|
-
protected determineRippleSize(): void;
|
|
29
|
-
protected getNormalizedPointerEventCoords(pointerEvent: PointerEvent): {
|
|
30
|
-
x: number;
|
|
31
|
-
y: number;
|
|
32
|
-
};
|
|
33
|
-
protected getTranslationCoordinates(positionEvent?: Event | null): {
|
|
34
|
-
startPoint: {
|
|
35
|
-
x: number;
|
|
36
|
-
y: number;
|
|
37
|
-
};
|
|
38
|
-
endPoint: {
|
|
39
|
-
x: number;
|
|
40
|
-
y: number;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
protected startPressAnimation(positionEvent?: Event | null): void;
|
|
44
15
|
/**
|
|
45
|
-
*
|
|
16
|
+
* Disables the ripple.
|
|
46
17
|
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
private hovered;
|
|
20
|
+
private focused;
|
|
21
|
+
private pressed;
|
|
22
|
+
private readonly mdRoot;
|
|
23
|
+
private rippleSize;
|
|
24
|
+
private rippleScale;
|
|
25
|
+
private initialSize;
|
|
26
|
+
private growAnimation?;
|
|
27
|
+
private state;
|
|
28
|
+
private rippleStartEvent?;
|
|
29
|
+
private checkBoundsAfterContextMenu;
|
|
30
|
+
handlePointerenter(event: PointerEvent): void;
|
|
31
|
+
handlePointerleave(event: PointerEvent): void;
|
|
32
|
+
handleFocusin(): void;
|
|
33
|
+
handleFocusout(): void;
|
|
34
|
+
handlePointerup(event: PointerEvent): void;
|
|
35
|
+
handlePointerdown(event: PointerEvent): Promise<void>;
|
|
36
|
+
handleClick(): void;
|
|
37
|
+
handlePointercancel(event: PointerEvent): void;
|
|
38
|
+
handleContextmenu(): void;
|
|
39
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
40
|
+
protected update(changedProps: PropertyValues<this>): void;
|
|
41
|
+
private getDimensions;
|
|
42
|
+
private determineRippleSize;
|
|
43
|
+
private getNormalizedPointerEventCoords;
|
|
44
|
+
private getTranslationCoordinates;
|
|
45
|
+
private startPressAnimation;
|
|
46
|
+
private endPressAnimation;
|
|
50
47
|
/**
|
|
51
|
-
*
|
|
48
|
+
* Returns `true` if
|
|
49
|
+
* - the ripple element is enabled
|
|
50
|
+
* - the pointer is primary for the input type
|
|
51
|
+
* - the pointer is the pointer that started the interaction, or will start
|
|
52
|
+
* the interaction
|
|
53
|
+
* - the pointer is a touch, or the pointer state has the primary button
|
|
54
|
+
* held, or the pointer is hovering
|
|
52
55
|
*/
|
|
53
|
-
|
|
54
|
-
beginFocus(): void;
|
|
55
|
-
endFocus(): void;
|
|
56
|
+
private shouldReactToEvent;
|
|
56
57
|
/**
|
|
57
|
-
*
|
|
58
|
+
* Check if the event is within the bounds of the element.
|
|
59
|
+
*
|
|
60
|
+
* This is only needed for the "stuck" contextmenu longpress on Chrome.
|
|
58
61
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
endPress(): void;
|
|
62
|
+
private inBounds;
|
|
63
|
+
private isTouch;
|
|
62
64
|
}
|