@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
|
@@ -3,81 +3,54 @@
|
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
//
|
|
5
5
|
|
|
6
|
-
// stylelint-disable selector-class-pattern --
|
|
7
|
-
// Selector '.md3-*' should only be used in this project.
|
|
8
|
-
|
|
9
|
-
@use '../../sass/typography';
|
|
10
|
-
|
|
11
6
|
@mixin styles() {
|
|
12
|
-
.
|
|
7
|
+
.supporting-text {
|
|
13
8
|
color: var(--_supporting-text-color);
|
|
14
9
|
display: flex;
|
|
15
10
|
justify-content: space-between;
|
|
16
11
|
padding: 0 var(--_supporting-text-padding);
|
|
17
|
-
|
|
18
|
-
@include typography.theme-styles(
|
|
19
|
-
(
|
|
20
|
-
font: var(--_supporting-text-font),
|
|
21
|
-
tracking: var(--_supporting-text-tracking),
|
|
22
|
-
weight: var(--_supporting-text-weight),
|
|
23
|
-
size: var(--_supporting-text-size),
|
|
24
|
-
line-height: var(--_supporting-text-line-height),
|
|
25
|
-
)
|
|
26
|
-
);
|
|
12
|
+
font: var(--_supporting-text-type);
|
|
27
13
|
}
|
|
28
14
|
|
|
29
|
-
.
|
|
30
|
-
.
|
|
15
|
+
.supporting-text-start,
|
|
16
|
+
.supporting-text-end {
|
|
31
17
|
// Can't be an inline display element (<span>) for padding-top to work.
|
|
32
18
|
display: flex;
|
|
19
|
+
}
|
|
33
20
|
|
|
21
|
+
.supporting-text-start ::slotted(:not(:empty)),
|
|
22
|
+
.supporting-text-end ::slotted(:not(:empty)) {
|
|
34
23
|
// Add padding to slotted elements instead of the wrappers so that it does not
|
|
35
24
|
// show when the supporting text is empty.
|
|
36
|
-
|
|
37
|
-
padding-top: var(--_supporting-text-padding-top);
|
|
38
|
-
}
|
|
25
|
+
padding-top: var(--_supporting-text-padding-top);
|
|
39
26
|
}
|
|
40
27
|
|
|
41
|
-
.
|
|
42
|
-
|
|
43
|
-
padding-inline-start: var(--_supporting-text-padding);
|
|
44
|
-
}
|
|
28
|
+
.supporting-text-end ::slotted(:not(:empty)) {
|
|
29
|
+
padding-inline-start: var(--_supporting-text-padding);
|
|
45
30
|
}
|
|
46
31
|
|
|
47
|
-
:hover {
|
|
48
|
-
|
|
49
|
-
color: var(--_hover-supporting-text-color);
|
|
50
|
-
}
|
|
32
|
+
:hover .supporting-text {
|
|
33
|
+
color: var(--_hover-supporting-text-color);
|
|
51
34
|
}
|
|
52
35
|
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
color: var(--_focus-supporting-text-color);
|
|
56
|
-
}
|
|
36
|
+
.focus .supporting-text {
|
|
37
|
+
color: var(--_focus-supporting-text-color);
|
|
57
38
|
}
|
|
58
39
|
|
|
59
|
-
.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
opacity: var(--_disabled-supporting-text-opacity);
|
|
63
|
-
}
|
|
40
|
+
.disabled .supporting-text {
|
|
41
|
+
color: var(--_disabled-supporting-text-color);
|
|
42
|
+
opacity: var(--_disabled-supporting-text-opacity);
|
|
64
43
|
}
|
|
65
44
|
|
|
66
|
-
.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
45
|
+
.error .supporting-text {
|
|
46
|
+
color: var(--_error-supporting-text-color);
|
|
47
|
+
}
|
|
70
48
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
}
|
|
49
|
+
.error:hover .supporting-text {
|
|
50
|
+
color: var(--_error-hover-supporting-text-color);
|
|
51
|
+
}
|
|
76
52
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
color: var(--_error-focus-supporting-text-color);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
53
|
+
.error.focus .supporting-text {
|
|
54
|
+
color: var(--_error-focus-supporting-text-color);
|
|
82
55
|
}
|
|
83
56
|
}
|
package/field/lib/field.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @requirecss {field.lib.shared_styles}
|
|
3
|
-
*
|
|
4
2
|
* @license
|
|
5
3
|
* Copyright 2021 Google LLC
|
|
6
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
5
|
*/
|
|
8
6
|
import { LitElement, PropertyValues, TemplateResult } from 'lit';
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
/**
|
|
8
|
+
* A field component.
|
|
9
|
+
*/
|
|
11
10
|
export declare class Field extends LitElement {
|
|
12
11
|
disabled: boolean;
|
|
13
12
|
error: boolean;
|
|
@@ -23,34 +22,16 @@ export declare class Field extends LitElement {
|
|
|
23
22
|
* Whether or not the field has trailing content.
|
|
24
23
|
*/
|
|
25
24
|
hasEnd: boolean;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
/** @soyTemplate */
|
|
31
|
-
render(): TemplateResult;
|
|
32
|
-
/** @soyTemplate */
|
|
33
|
-
protected renderContainer(): TemplateResult;
|
|
34
|
-
/** @soyTemplate */
|
|
35
|
-
protected getRenderClasses(): ClassInfo;
|
|
36
|
-
/** @soyTemplate */
|
|
37
|
-
protected renderContainerContents(): TemplateResult;
|
|
38
|
-
/** @soyTemplate */
|
|
39
|
-
protected renderMiddleContents(): TemplateResult;
|
|
40
|
-
/** @soyTemplate */
|
|
41
|
-
protected renderFloatingLabel(): TemplateResult;
|
|
42
|
-
/** @soyTemplate */
|
|
43
|
-
protected renderRestingLabel(): TemplateResult;
|
|
44
|
-
/** @soyTemplate */
|
|
45
|
-
protected renderLabelText(): string;
|
|
46
|
-
/** @soyTemplate */
|
|
47
|
-
protected renderSupportingText(): TemplateResult;
|
|
25
|
+
private isAnimating;
|
|
26
|
+
private readonly labelAnimationSignal;
|
|
27
|
+
private readonly floatingLabelEl;
|
|
28
|
+
private readonly restingLabelEl;
|
|
48
29
|
protected update(props: PropertyValues<Field>): void;
|
|
49
|
-
protected
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
30
|
+
protected render(): TemplateResult<1>;
|
|
31
|
+
protected renderBackground?(): TemplateResult;
|
|
32
|
+
protected renderIndicator?(): TemplateResult;
|
|
33
|
+
protected renderOutline?(floatingLabel: TemplateResult): TemplateResult;
|
|
34
|
+
private renderLabel;
|
|
35
|
+
private animateLabelIfNeeded;
|
|
36
|
+
private getLabelKeyframes;
|
|
56
37
|
}
|
package/field/lib/field.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @requirecss {field.lib.shared_styles}
|
|
3
|
-
*
|
|
4
2
|
* @license
|
|
5
3
|
* Copyright 2021 Google LLC
|
|
6
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
5
|
*/
|
|
8
6
|
import { __decorate, __metadata } from "tslib";
|
|
9
|
-
import { html, LitElement } from 'lit';
|
|
7
|
+
import { html, LitElement, nothing } from 'lit';
|
|
10
8
|
import { property, queryAsync, state } from 'lit/decorators.js';
|
|
11
9
|
import { classMap } from 'lit/directives/class-map.js';
|
|
12
|
-
import { createAnimationSignal,
|
|
13
|
-
/**
|
|
10
|
+
import { createAnimationSignal, EASING } from '../../motion/animation.js';
|
|
11
|
+
/**
|
|
12
|
+
* A field component.
|
|
13
|
+
*/
|
|
14
14
|
export class Field extends LitElement {
|
|
15
15
|
constructor() {
|
|
16
16
|
super(...arguments);
|
|
@@ -30,99 +30,6 @@ export class Field extends LitElement {
|
|
|
30
30
|
this.isAnimating = false;
|
|
31
31
|
this.labelAnimationSignal = createAnimationSignal();
|
|
32
32
|
}
|
|
33
|
-
/** @soyTemplate */
|
|
34
|
-
render() {
|
|
35
|
-
return html `
|
|
36
|
-
<span class="md3-field ${classMap(this.getRenderClasses())}">
|
|
37
|
-
${this.renderContainer()}
|
|
38
|
-
${this.renderSupportingText()}
|
|
39
|
-
</span>
|
|
40
|
-
`;
|
|
41
|
-
}
|
|
42
|
-
/** @soyTemplate */
|
|
43
|
-
renderContainer() {
|
|
44
|
-
return html `
|
|
45
|
-
<span class="md3-field__container">
|
|
46
|
-
${this.renderContainerContents()}
|
|
47
|
-
</span>
|
|
48
|
-
`;
|
|
49
|
-
}
|
|
50
|
-
/** @soyTemplate */
|
|
51
|
-
getRenderClasses() {
|
|
52
|
-
return {
|
|
53
|
-
'md3-field--disabled': this.disabled,
|
|
54
|
-
'md3-field--error': this.error,
|
|
55
|
-
'md3-field--focused': this.focused,
|
|
56
|
-
'md3-field--with-start': this.hasStart,
|
|
57
|
-
'md3-field--with-end': this.hasEnd,
|
|
58
|
-
'md3-field--populated': this.populated,
|
|
59
|
-
'md3-field--required': this.required,
|
|
60
|
-
'md3-field--no-label': !this.label,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
/** @soyTemplate */
|
|
64
|
-
renderContainerContents() {
|
|
65
|
-
return html `
|
|
66
|
-
<span class="md3-field__start">
|
|
67
|
-
<slot name="start"></slot>
|
|
68
|
-
</span>
|
|
69
|
-
<span class="md3-field__middle">${this.renderMiddleContents()}</span>
|
|
70
|
-
<span class="md3-field__end">
|
|
71
|
-
<slot name="end"></slot>
|
|
72
|
-
</span>
|
|
73
|
-
`;
|
|
74
|
-
}
|
|
75
|
-
/** @soyTemplate */
|
|
76
|
-
renderMiddleContents() {
|
|
77
|
-
return html `
|
|
78
|
-
<span class="md3-field__content"><slot></slot></span>
|
|
79
|
-
`;
|
|
80
|
-
}
|
|
81
|
-
/** @soyTemplate */
|
|
82
|
-
renderFloatingLabel() {
|
|
83
|
-
const visible = (this.focused || this.populated) && !this.isAnimating;
|
|
84
|
-
/** @classMap */
|
|
85
|
-
const classes = { 'md3-field__label--hidden': !visible };
|
|
86
|
-
return html `
|
|
87
|
-
<span class="md3-field__label md3-field__label--floating ${classMap(classes)}"
|
|
88
|
-
aria-hidden=${!visible}
|
|
89
|
-
>${this.renderLabelText()}</span>
|
|
90
|
-
`;
|
|
91
|
-
// TODO(b/217441842): Create shared function once argument bug is fixed
|
|
92
|
-
// return this.renderLabel(LabelType.FLOATING);
|
|
93
|
-
}
|
|
94
|
-
/** @soyTemplate */
|
|
95
|
-
renderRestingLabel() {
|
|
96
|
-
const visible = !(this.focused || this.populated) || this.isAnimating;
|
|
97
|
-
/** @classMap */
|
|
98
|
-
const classes = { 'md3-field__label--hidden': !visible };
|
|
99
|
-
return html `
|
|
100
|
-
<span class="md3-field__label md3-field__label--resting ${classMap(classes)}"
|
|
101
|
-
aria-hidden=${!visible}
|
|
102
|
-
>${this.renderLabelText()}</span>
|
|
103
|
-
`;
|
|
104
|
-
// TODO(b/217441842): Create shared function once argument bug is fixed
|
|
105
|
-
// return this.renderLabel(LabelType.RESTING);
|
|
106
|
-
}
|
|
107
|
-
/** @soyTemplate */
|
|
108
|
-
renderLabelText() {
|
|
109
|
-
const labelText = this.label ?? '';
|
|
110
|
-
const optionalAsterisk = this.required && labelText ? '*' : '';
|
|
111
|
-
return labelText + optionalAsterisk;
|
|
112
|
-
}
|
|
113
|
-
/** @soyTemplate */
|
|
114
|
-
renderSupportingText() {
|
|
115
|
-
return html `
|
|
116
|
-
<span class="md3-field__supporting-text">
|
|
117
|
-
<span class="md3-field__supporting-text-start">
|
|
118
|
-
<slot name="supporting-text"></slot>
|
|
119
|
-
</span>
|
|
120
|
-
<span class="md3-field__supporting-text-end">
|
|
121
|
-
<slot name="supporting-text-end"></slot>
|
|
122
|
-
</span>
|
|
123
|
-
</span>
|
|
124
|
-
`;
|
|
125
|
-
}
|
|
126
33
|
update(props) {
|
|
127
34
|
// Client-side property updates
|
|
128
35
|
// When disabling, remove focus styles if focused.
|
|
@@ -137,6 +44,77 @@ export class Field extends LitElement {
|
|
|
137
44
|
});
|
|
138
45
|
super.update(props);
|
|
139
46
|
}
|
|
47
|
+
render() {
|
|
48
|
+
const floatingLabel = this.renderLabel(/*isFloating*/ true);
|
|
49
|
+
const restingLabel = this.renderLabel(/*isFloating*/ false);
|
|
50
|
+
const outline = this.renderOutline?.(floatingLabel);
|
|
51
|
+
const classes = {
|
|
52
|
+
'disabled': this.disabled,
|
|
53
|
+
'error': this.error && !this.disabled,
|
|
54
|
+
'focused': this.focused,
|
|
55
|
+
'with-start': this.hasStart,
|
|
56
|
+
'with-end': this.hasEnd,
|
|
57
|
+
'populated': this.populated,
|
|
58
|
+
'required': this.required,
|
|
59
|
+
'no-label': !this.label,
|
|
60
|
+
};
|
|
61
|
+
return html `
|
|
62
|
+
<div class="field ${classMap(classes)}">
|
|
63
|
+
<div class="container">
|
|
64
|
+
${this.renderBackground?.()}
|
|
65
|
+
${this.renderIndicator?.()}
|
|
66
|
+
${outline}
|
|
67
|
+
<div class="start">
|
|
68
|
+
<slot name="start"></slot>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="middle">
|
|
71
|
+
${restingLabel}
|
|
72
|
+
${outline ? nothing : floatingLabel}
|
|
73
|
+
<div class="content">
|
|
74
|
+
<slot></slot>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="end">
|
|
78
|
+
<slot name="end"></slot>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div class="supporting-text">
|
|
83
|
+
<div class="supporting-text-start">
|
|
84
|
+
<slot name="supporting-text"></slot>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="supporting-text-end">
|
|
87
|
+
<slot name="supporting-text-end"></slot>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
`;
|
|
92
|
+
}
|
|
93
|
+
renderLabel(isFloating) {
|
|
94
|
+
let visible;
|
|
95
|
+
if (isFloating) {
|
|
96
|
+
// Floating label is visible when focused/populated. It is never visible
|
|
97
|
+
// while animating.
|
|
98
|
+
visible = (this.focused || this.populated) && !this.isAnimating;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Resting label is visible when unfocused or while animating.
|
|
102
|
+
visible = !(this.focused || this.populated) || this.isAnimating;
|
|
103
|
+
}
|
|
104
|
+
const classes = {
|
|
105
|
+
'hidden': !visible,
|
|
106
|
+
'floating': isFloating,
|
|
107
|
+
'resting': !isFloating,
|
|
108
|
+
};
|
|
109
|
+
let labelText = this.label ?? '';
|
|
110
|
+
// Add '*' if a label is present and the field is required
|
|
111
|
+
labelText += this.required && labelText ? '*' : '';
|
|
112
|
+
return html `
|
|
113
|
+
<span class="label ${classMap(classes)}"
|
|
114
|
+
aria-hidden=${!visible}
|
|
115
|
+
>${labelText}</span>
|
|
116
|
+
`;
|
|
117
|
+
}
|
|
140
118
|
async animateLabelIfNeeded({ wasFocused, wasPopulated }) {
|
|
141
119
|
if (!this.label) {
|
|
142
120
|
return;
|
|
@@ -168,7 +146,7 @@ export class Field extends LitElement {
|
|
|
168
146
|
// Re-calculating the animation each time will prevent any visual glitches
|
|
169
147
|
// from appearing.
|
|
170
148
|
// TODO(b/241113345): use animation tokens
|
|
171
|
-
const animation = labelEl.animate(keyframes, { duration: 150, easing:
|
|
149
|
+
const animation = labelEl.animate(keyframes, { duration: 150, easing: EASING.STANDARD });
|
|
172
150
|
signal.addEventListener('abort', () => {
|
|
173
151
|
// Cancel if requested (another animation starts playing).
|
|
174
152
|
animation.cancel();
|
|
@@ -243,11 +221,11 @@ __decorate([
|
|
|
243
221
|
__metadata("design:type", Object)
|
|
244
222
|
], Field.prototype, "isAnimating", void 0);
|
|
245
223
|
__decorate([
|
|
246
|
-
queryAsync('.
|
|
224
|
+
queryAsync('.label.floating'),
|
|
247
225
|
__metadata("design:type", Promise)
|
|
248
226
|
], Field.prototype, "floatingLabelEl", void 0);
|
|
249
227
|
__decorate([
|
|
250
|
-
queryAsync('.
|
|
228
|
+
queryAsync('.label.resting'),
|
|
251
229
|
__metadata("design:type", Promise)
|
|
252
230
|
], Field.prototype, "restingLabelEl", void 0);
|
|
253
231
|
//# sourceMappingURL=field.js.map
|
package/field/lib/field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","sourceRoot":"","sources":["field.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @requirecss {field.lib.shared_styles}\n *\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {html, LitElement, PropertyValues, TemplateResult} from 'lit';\nimport {property, queryAsync, state} from 'lit/decorators.js';\nimport {ClassInfo, classMap} from 'lit/directives/class-map.js';\n\nimport {createAnimationSignal, Easing} from '../../motion/animation.js';\n\n/** @soyCompatible */\nexport class Field extends LitElement {\n @property({type: Boolean}) disabled = false;\n @property({type: Boolean}) error = false;\n @property({type: Boolean}) focused = false;\n @property({type: String}) label?: string;\n @property({type: Boolean}) populated = false;\n @property({type: Boolean}) required = false;\n\n /**\n * Whether or not the field has leading content.\n */\n @property({type: Boolean}) hasStart = false;\n /**\n * Whether or not the field has trailing content.\n */\n @property({type: Boolean}) hasEnd = false;\n\n @state() protected isAnimating = false;\n\n protected readonly labelAnimationSignal = createAnimationSignal();\n\n @queryAsync('.md3-field__label--floating')\n protected readonly floatingLabelEl!: Promise<HTMLElement>;\n @queryAsync('.md3-field__label--resting')\n protected readonly restingLabelEl!: Promise<HTMLElement>;\n\n /** @soyTemplate */\n override render(): TemplateResult {\n return html`\n <span class=\"md3-field ${classMap(this.getRenderClasses())}\">\n ${this.renderContainer()}\n ${this.renderSupportingText()}\n </span>\n `;\n }\n\n /** @soyTemplate */\n protected renderContainer(): TemplateResult {\n return html`\n <span class=\"md3-field__container\">\n ${this.renderContainerContents()}\n </span>\n `;\n }\n\n /** @soyTemplate */\n protected getRenderClasses(): ClassInfo {\n return {\n 'md3-field--disabled': this.disabled,\n 'md3-field--error': this.error,\n 'md3-field--focused': this.focused,\n 'md3-field--with-start': this.hasStart,\n 'md3-field--with-end': this.hasEnd,\n 'md3-field--populated': this.populated,\n 'md3-field--required': this.required,\n 'md3-field--no-label': !this.label,\n };\n }\n\n /** @soyTemplate */\n protected renderContainerContents(): TemplateResult {\n return html`\n <span class=\"md3-field__start\">\n <slot name=\"start\"></slot>\n </span>\n <span class=\"md3-field__middle\">${this.renderMiddleContents()}</span>\n <span class=\"md3-field__end\">\n <slot name=\"end\"></slot>\n </span>\n `;\n }\n\n /** @soyTemplate */\n protected renderMiddleContents(): TemplateResult {\n return html`\n <span class=\"md3-field__content\"><slot></slot></span>\n `;\n }\n\n /** @soyTemplate */\n protected renderFloatingLabel(): TemplateResult {\n const visible = (this.focused || this.populated) && !this.isAnimating;\n /** @classMap */\n const classes = {'md3-field__label--hidden': !visible};\n return html`\n <span class=\"md3-field__label md3-field__label--floating ${\n classMap(classes)}\"\n aria-hidden=${!visible}\n >${this.renderLabelText()}</span>\n `;\n\n // TODO(b/217441842): Create shared function once argument bug is fixed\n // return this.renderLabel(LabelType.FLOATING);\n }\n\n /** @soyTemplate */\n protected renderRestingLabel(): TemplateResult {\n const visible = !(this.focused || this.populated) || this.isAnimating;\n /** @classMap */\n const classes = {'md3-field__label--hidden': !visible};\n return html`\n <span class=\"md3-field__label md3-field__label--resting ${\n classMap(classes)}\"\n aria-hidden=${!visible}\n >${this.renderLabelText()}</span>\n `;\n\n // TODO(b/217441842): Create shared function once argument bug is fixed\n // return this.renderLabel(LabelType.RESTING);\n }\n\n /** @soyTemplate */\n protected renderLabelText(): string {\n const labelText = this.label ?? '';\n const optionalAsterisk = this.required && labelText ? '*' : '';\n return labelText + optionalAsterisk;\n }\n\n /** @soyTemplate */\n protected renderSupportingText(): TemplateResult {\n return html`\n <span class=\"md3-field__supporting-text\">\n <span class=\"md3-field__supporting-text-start\">\n <slot name=\"supporting-text\"></slot>\n </span>\n <span class=\"md3-field__supporting-text-end\">\n <slot name=\"supporting-text-end\"></slot>\n </span>\n </span>\n `;\n }\n\n protected override update(props: PropertyValues<Field>) {\n // Client-side property updates\n\n // When disabling, remove focus styles if focused.\n if (this.disabled && this.focused) {\n props.set('focused', true);\n this.focused = false;\n }\n\n // Animate if focused or populated change.\n this.animateLabelIfNeeded({\n wasFocused: props.get('focused'),\n wasPopulated: props.get('populated')\n });\n\n super.update(props);\n }\n\n protected async animateLabelIfNeeded({wasFocused, wasPopulated}: {\n wasFocused?: boolean,\n wasPopulated?: boolean\n }) {\n if (!this.label) {\n return;\n }\n\n wasFocused ??= this.focused;\n wasPopulated ??= this.populated;\n const wasFloating = wasFocused || wasPopulated;\n const shouldBeFloating = this.focused || this.populated;\n if (wasFloating === shouldBeFloating) {\n return;\n }\n\n this.isAnimating = true;\n const signal = this.labelAnimationSignal.start();\n\n // Only one label is visible at a time for clearer text rendering.\n // The resting label is visible and used during animation. At the end of the\n // animation, it will either remain visible (if resting) or hide and the\n // floating label will be shown.\n const labelEl = await this.restingLabelEl;\n const keyframes = await this.getLabelKeyframes();\n if (signal.aborted) {\n // Don't animate if this animation was requested to stop while getting\n // the label element or calculating keyframes\n return;\n }\n\n // We don't use forward filling because if the dimensions of the text field\n // change (leading icon removed, density changes, etc), then the animation\n // will be inaccurate.\n //\n // Re-calculating the animation each time will prevent any visual glitches\n // from appearing.\n // TODO(b/241113345): use animation tokens\n const animation =\n labelEl.animate(keyframes, {duration: 150, easing: Easing.STANDARD});\n\n signal.addEventListener('abort', () => {\n // Cancel if requested (another animation starts playing).\n animation.cancel();\n });\n\n animation.addEventListener('finish', () => {\n // At the end of the animation, update the visible label.\n this.isAnimating = false;\n this.labelAnimationSignal.finish();\n });\n }\n\n protected async getLabelKeyframes() {\n const floatingLabelEl = await this.floatingLabelEl;\n const restingLabelEl = await this.restingLabelEl;\n const {\n x: floatingX,\n y: floatingY,\n width: floatingWidth,\n height: floatingHeight\n } = floatingLabelEl.getBoundingClientRect();\n const {\n x: restingX,\n y: restingY,\n width: restingWidth,\n height: restingHeight\n } = restingLabelEl.getBoundingClientRect();\n // Scale by width ratio instead of font size since letter-spacing will scale\n // incorrectly. Using the width we can better approximate the adjusted\n // scale and compensate for tracking.\n const scale = floatingWidth / restingWidth;\n const xDelta = floatingX - restingX;\n // The line-height of the resting and floating label are different. When\n // we move the resting label up to the floating label's position, it won't\n // exactly match because of this. We need to adjust by half of what the\n // final scaled resting label's height will be.\n const yDelta = floatingY - restingY +\n Math.round((floatingHeight - restingHeight * scale) / 2);\n\n // Create the two transforms: resting to floating (using the calculations\n // above), and floating to resting (re-setting the transform to initial\n // values).\n const floatTransform = `translateX(${xDelta}px) translateY(calc(-50% + ${\n yDelta}px)) scale(${scale})`;\n const restTransform = `translateX(0) translateY(-50%) scale(1)`;\n\n if (this.focused || this.populated) {\n return [{transform: restTransform}, {transform: floatTransform}];\n }\n\n return [{transform: floatTransform}, {transform: restTransform}];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["field.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {html, LitElement, nothing, PropertyValues, TemplateResult} from 'lit';\nimport {property, queryAsync, state} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\n\nimport {createAnimationSignal, EASING} from '../../motion/animation.js';\n\n/**\n * A field component.\n */\nexport class Field extends LitElement {\n @property({type: Boolean}) disabled = false;\n @property({type: Boolean}) error = false;\n @property({type: Boolean}) focused = false;\n @property({type: String}) label?: string;\n @property({type: Boolean}) populated = false;\n @property({type: Boolean}) required = false;\n\n /**\n * Whether or not the field has leading content.\n */\n @property({type: Boolean}) hasStart = false;\n\n /**\n * Whether or not the field has trailing content.\n */\n @property({type: Boolean}) hasEnd = false;\n\n @state() private isAnimating = false;\n private readonly labelAnimationSignal = createAnimationSignal();\n @queryAsync('.label.floating')\n private readonly floatingLabelEl!: Promise<HTMLElement>;\n @queryAsync('.label.resting')\n private readonly restingLabelEl!: Promise<HTMLElement>;\n\n protected override update(props: PropertyValues<Field>) {\n // Client-side property updates\n\n // When disabling, remove focus styles if focused.\n if (this.disabled && this.focused) {\n props.set('focused', true);\n this.focused = false;\n }\n\n // Animate if focused or populated change.\n this.animateLabelIfNeeded({\n wasFocused: props.get('focused'),\n wasPopulated: props.get('populated')\n });\n\n super.update(props);\n }\n\n protected override render() {\n const floatingLabel = this.renderLabel(/*isFloating*/ true);\n const restingLabel = this.renderLabel(/*isFloating*/ false);\n const outline = this.renderOutline?.(floatingLabel);\n const classes = {\n 'disabled': this.disabled,\n 'error': this.error && !this.disabled,\n 'focused': this.focused,\n 'with-start': this.hasStart,\n 'with-end': this.hasEnd,\n 'populated': this.populated,\n 'required': this.required,\n 'no-label': !this.label,\n };\n\n return html`\n <div class=\"field ${classMap(classes)}\">\n <div class=\"container\">\n ${this.renderBackground?.()}\n ${this.renderIndicator?.()}\n ${outline}\n <div class=\"start\">\n <slot name=\"start\"></slot>\n </div>\n <div class=\"middle\">\n ${restingLabel}\n ${outline ? nothing : floatingLabel}\n <div class=\"content\">\n <slot></slot>\n </div>\n </div>\n <div class=\"end\">\n <slot name=\"end\"></slot>\n </div>\n </div>\n\n <div class=\"supporting-text\">\n <div class=\"supporting-text-start\">\n <slot name=\"supporting-text\"></slot>\n </div>\n <div class=\"supporting-text-end\">\n <slot name=\"supporting-text-end\"></slot>\n </div>\n </div>\n </div>\n `;\n }\n\n protected renderBackground?(): TemplateResult;\n protected renderIndicator?(): TemplateResult;\n protected renderOutline?(floatingLabel: TemplateResult): TemplateResult;\n\n private renderLabel(isFloating: boolean) {\n let visible: boolean;\n if (isFloating) {\n // Floating label is visible when focused/populated. It is never visible\n // while animating.\n visible = (this.focused || this.populated) && !this.isAnimating;\n } else {\n // Resting label is visible when unfocused or while animating.\n visible = !(this.focused || this.populated) || this.isAnimating;\n }\n\n const classes = {\n 'hidden': !visible,\n 'floating': isFloating,\n 'resting': !isFloating,\n };\n\n let labelText = this.label ?? '';\n // Add '*' if a label is present and the field is required\n labelText += this.required && labelText ? '*' : '';\n\n return html`\n <span class=\"label ${classMap(classes)}\"\n aria-hidden=${!visible}\n >${labelText}</span>\n `;\n }\n\n private async animateLabelIfNeeded({wasFocused, wasPopulated}: {\n wasFocused?: boolean,\n wasPopulated?: boolean\n }) {\n if (!this.label) {\n return;\n }\n\n wasFocused ??= this.focused;\n wasPopulated ??= this.populated;\n const wasFloating = wasFocused || wasPopulated;\n const shouldBeFloating = this.focused || this.populated;\n if (wasFloating === shouldBeFloating) {\n return;\n }\n\n this.isAnimating = true;\n const signal = this.labelAnimationSignal.start();\n\n // Only one label is visible at a time for clearer text rendering.\n // The resting label is visible and used during animation. At the end of the\n // animation, it will either remain visible (if resting) or hide and the\n // floating label will be shown.\n const labelEl = await this.restingLabelEl;\n const keyframes = await this.getLabelKeyframes();\n if (signal.aborted) {\n // Don't animate if this animation was requested to stop while getting\n // the label element or calculating keyframes\n return;\n }\n\n // We don't use forward filling because if the dimensions of the text field\n // change (leading icon removed, density changes, etc), then the animation\n // will be inaccurate.\n //\n // Re-calculating the animation each time will prevent any visual glitches\n // from appearing.\n // TODO(b/241113345): use animation tokens\n const animation =\n labelEl.animate(keyframes, {duration: 150, easing: EASING.STANDARD});\n\n signal.addEventListener('abort', () => {\n // Cancel if requested (another animation starts playing).\n animation.cancel();\n });\n\n animation.addEventListener('finish', () => {\n // At the end of the animation, update the visible label.\n this.isAnimating = false;\n this.labelAnimationSignal.finish();\n });\n }\n\n private async getLabelKeyframes() {\n const floatingLabelEl = await this.floatingLabelEl;\n const restingLabelEl = await this.restingLabelEl;\n const {\n x: floatingX,\n y: floatingY,\n width: floatingWidth,\n height: floatingHeight\n } = floatingLabelEl.getBoundingClientRect();\n const {\n x: restingX,\n y: restingY,\n width: restingWidth,\n height: restingHeight\n } = restingLabelEl.getBoundingClientRect();\n // Scale by width ratio instead of font size since letter-spacing will scale\n // incorrectly. Using the width we can better approximate the adjusted\n // scale and compensate for tracking.\n const scale = floatingWidth / restingWidth;\n const xDelta = floatingX - restingX;\n // The line-height of the resting and floating label are different. When\n // we move the resting label up to the floating label's position, it won't\n // exactly match because of this. We need to adjust by half of what the\n // final scaled resting label's height will be.\n const yDelta = floatingY - restingY +\n Math.round((floatingHeight - restingHeight * scale) / 2);\n\n // Create the two transforms: resting to floating (using the calculations\n // above), and floating to resting (re-setting the transform to initial\n // values).\n const floatTransform = `translateX(${xDelta}px) translateY(calc(-50% + ${\n yDelta}px)) scale(${scale})`;\n const restTransform = `translateX(0) translateY(-50%) scale(1)`;\n\n if (this.focused || this.populated) {\n return [{transform: restTransform}, {transform: floatTransform}];\n }\n\n return [{transform: floatTransform}, {transform: restTransform}];\n }\n}\n"]}
|
|
@@ -3,22 +3,16 @@
|
|
|
3
3
|
* Copyright 2021 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { PropertyValues
|
|
7
|
-
import { ClassInfo } from 'lit/directives/class-map.js';
|
|
6
|
+
import { PropertyValues } from 'lit';
|
|
8
7
|
import { Field } from './field.js';
|
|
9
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* A filled field component.
|
|
10
|
+
*/
|
|
10
11
|
export declare class FilledField extends Field {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
protected
|
|
14
|
-
|
|
15
|
-
protected
|
|
16
|
-
|
|
17
|
-
protected renderContainerContents(): TemplateResult;
|
|
18
|
-
/** @soyTemplate */
|
|
19
|
-
protected renderMiddleContents(): TemplateResult;
|
|
20
|
-
/** @bubbleWizEvent */
|
|
21
|
-
protected handleClick(event: MouseEvent | TouchEvent): void;
|
|
22
|
-
protected update(props: PropertyValues<this>): void;
|
|
23
|
-
protected updateStrokeTransformOrigin(event?: MouseEvent | TouchEvent): Promise<void>;
|
|
12
|
+
private strokeTransformOrigin;
|
|
13
|
+
constructor();
|
|
14
|
+
protected renderBackground(): import("lit-html").TemplateResult<1>;
|
|
15
|
+
protected renderIndicator(): import("lit-html").TemplateResult<1>;
|
|
16
|
+
protected update(props: PropertyValues<FilledField>): void;
|
|
17
|
+
private updateStrokeTransformOrigin;
|
|
24
18
|
}
|
|
@@ -8,53 +8,30 @@ import { html } from 'lit';
|
|
|
8
8
|
import { state } from 'lit/decorators.js';
|
|
9
9
|
import { styleMap } from 'lit/directives/style-map.js';
|
|
10
10
|
import { Field } from './field.js';
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* A filled field component.
|
|
13
|
+
*/
|
|
12
14
|
export class FilledField extends Field {
|
|
13
15
|
constructor() {
|
|
14
|
-
super(
|
|
16
|
+
super();
|
|
15
17
|
this.strokeTransformOrigin = '';
|
|
18
|
+
this.addEventListener('click', event => {
|
|
19
|
+
if (!this.disabled) {
|
|
20
|
+
this.updateStrokeTransformOrigin(event);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
16
23
|
}
|
|
17
|
-
|
|
18
|
-
getRenderClasses() {
|
|
19
|
-
return {
|
|
20
|
-
...super.getRenderClasses(),
|
|
21
|
-
'md3-field--filled': true,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
/** @soyTemplate */
|
|
25
|
-
renderContainer() {
|
|
24
|
+
renderBackground() {
|
|
26
25
|
return html `
|
|
27
|
-
<
|
|
28
|
-
${this.renderContainerContents()}
|
|
29
|
-
</span>
|
|
26
|
+
<div class="state-layer"></div>
|
|
30
27
|
`;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
|
-
renderContainerContents() {
|
|
34
|
-
/** @styleMap */
|
|
29
|
+
renderIndicator() {
|
|
35
30
|
const strokeStyle = { transformOrigin: this.strokeTransformOrigin };
|
|
36
31
|
return html `
|
|
37
|
-
<
|
|
38
|
-
${super.renderContainerContents()}
|
|
39
|
-
<span class="md3-field__active-indicator"
|
|
40
|
-
style="${styleMap(strokeStyle)}"></span>
|
|
41
|
-
`;
|
|
42
|
-
}
|
|
43
|
-
/** @soyTemplate */
|
|
44
|
-
renderMiddleContents() {
|
|
45
|
-
return html `
|
|
46
|
-
${this.renderFloatingLabel()}
|
|
47
|
-
${this.renderRestingLabel()}
|
|
48
|
-
${super.renderMiddleContents()}
|
|
32
|
+
<div class="active-indicator" style="${styleMap(strokeStyle)}"></div>
|
|
49
33
|
`;
|
|
50
34
|
}
|
|
51
|
-
/** @bubbleWizEvent */
|
|
52
|
-
handleClick(event) {
|
|
53
|
-
if (this.disabled) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
this.updateStrokeTransformOrigin(event);
|
|
57
|
-
}
|
|
58
35
|
update(props) {
|
|
59
36
|
// Upon losing focus, the stroke resets to expanding from the center, such
|
|
60
37
|
// as when re-focusing with a keyboard.
|
|
@@ -64,7 +41,7 @@ export class FilledField extends Field {
|
|
|
64
41
|
}
|
|
65
42
|
super.update(props);
|
|
66
43
|
}
|
|
67
|
-
|
|
44
|
+
updateStrokeTransformOrigin(event) {
|
|
68
45
|
let transformOrigin = '';
|
|
69
46
|
if (event) {
|
|
70
47
|
// Can't use instanceof TouchEvent since Firefox does not provide the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filled-field.js","sourceRoot":"","sources":["filled-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"filled-field.js","sourceRoot":"","sources":["filled-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,IAAI,EAAiB,MAAM,KAAK,CAAC;AACzC,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAC,QAAQ,EAAC,MAAM,6BAA6B,CAAC;AAErD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAEjC;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGpC;QACE,KAAK,EAAE,CAAC;QAHO,0BAAqB,GAAG,EAAE,CAAC;QAI1C,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAClB,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEkB,gBAAgB;QACjC,OAAO,IAAI,CAAA;;KAEV,CAAC;IACJ,CAAC;IAEkB,eAAe;QAChC,MAAM,WAAW,GAAG,EAAC,eAAe,EAAE,IAAI,CAAC,qBAAqB,EAAC,CAAC;QAClE,OAAO,IAAI,CAAA;6CAC8B,QAAQ,CAAC,WAAW,CAAC;KAC7D,CAAC;IACJ,CAAC;IAEkB,MAAM,CAAC,KAAkC;QAC1D,0EAA0E;QAC1E,uCAAuC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACzD,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,2BAA2B,EAAE,CAAC;SACpC;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAEO,2BAA2B,CAAC,KAA6B;QAC/D,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,KAAK,EAAE;YACT,qEAAqE;YACrE,wBAAwB;YACxB,MAAM,YAAY,GAAG,SAAS,IAAI,KAAK,CAAC;YACxC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC9C,eAAe,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC;SAC9C;QAED,IAAI,CAAC,qBAAqB,GAAG,eAAe,CAAC;IAC/C,CAAC;CACF;AAhDC;IAAC,KAAK,EAAE;;0DAAoC","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {html, PropertyValues} from 'lit';\nimport {state} from 'lit/decorators.js';\nimport {styleMap} from 'lit/directives/style-map.js';\n\nimport {Field} from './field.js';\n\n/**\n * A filled field component.\n */\nexport class FilledField extends Field {\n @state() private strokeTransformOrigin = '';\n\n constructor() {\n super();\n this.addEventListener('click', event => {\n if (!this.disabled) {\n this.updateStrokeTransformOrigin(event);\n }\n });\n }\n\n protected override renderBackground() {\n return html`\n <div class=\"state-layer\"></div>\n `;\n }\n\n protected override renderIndicator() {\n const strokeStyle = {transformOrigin: this.strokeTransformOrigin};\n return html`\n <div class=\"active-indicator\" style=\"${styleMap(strokeStyle)}\"></div>\n `;\n }\n\n protected override update(props: PropertyValues<FilledField>) {\n // Upon losing focus, the stroke resets to expanding from the center, such\n // as when re-focusing with a keyboard.\n const unfocusing = props.has('focused') && !this.focused;\n if (unfocusing) {\n this.updateStrokeTransformOrigin();\n }\n\n super.update(props);\n }\n\n private updateStrokeTransformOrigin(event?: MouseEvent|TouchEvent) {\n let transformOrigin = '';\n if (event) {\n // Can't use instanceof TouchEvent since Firefox does not provide the\n // constructor globally.\n const isTouchEvent = 'touches' in event;\n const eventX = isTouchEvent ? event.touches[0].clientX : event.clientX;\n const rootRect = this.getBoundingClientRect();\n transformOrigin = `${eventX - rootRect.x}px`;\n }\n\n this.strokeTransformOrigin = transformOrigin;\n }\n}\n"]}
|