@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foundation.js","sourceRoot":"","sources":["foundation.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 {MDCChipActionFocusBehavior, MDCChipActionType} from '../../action/lib/constants.js';\nimport {MDCChipAnimation} from '../../chip/lib/constants.js';\n\nimport {MDCChipSetAdapter} from './adapter.js';\nimport {MDCChipSetAttributes, MDCChipSetEvents} from './constants.js';\nimport {ChipAnimationEvent, ChipInteractionEvent, ChipNavigationEvent, MDCChipSetInteractionEventDetail, MDCChipSetRemovalEventDetail, MDCChipSetSelectionEventDetail} from './types.js';\n\ninterface FocusAction {\n action: MDCChipActionType;\n index: number;\n}\n\nenum Operator {\n INCREMENT,\n DECREMENT,\n}\n\n/**\n * MDCChipSetFoundation provides a foundation for all chips.\n */\nexport class MDCChipSetFoundation {\n private readonly adapter: MDCChipSetAdapter;\n\n static get defaultAdapter(): MDCChipSetAdapter {\n return {\n announceMessage: () => undefined,\n emitEvent: () => undefined,\n getAttribute: () => null,\n getChipActionsAtIndex: () => [],\n getChipCount: () => 0,\n getChipIdAtIndex: () => '',\n getChipIndexById: () => 0,\n isChipFocusableAtIndex: () => false,\n isChipSelectableAtIndex: () => false,\n isChipSelectedAtIndex: () => false,\n removeChipAtIndex: () => {},\n setChipFocusAtIndex: () => undefined,\n setChipSelectedAtIndex: () => undefined,\n startChipAnimationAtIndex: () => undefined,\n };\n }\n\n constructor(adapter?: Partial<MDCChipSetAdapter>) {\n this.adapter = {...MDCChipSetFoundation.defaultAdapter, ...adapter};\n }\n\n handleChipAnimation({detail}: ChipAnimationEvent) {\n const {\n chipID,\n animation,\n isComplete,\n addedAnnouncement,\n removedAnnouncement\n } = detail;\n const index = this.adapter.getChipIndexById(chipID);\n\n if (animation === MDCChipAnimation.EXIT && isComplete) {\n if (removedAnnouncement) {\n this.adapter.announceMessage(removedAnnouncement);\n }\n this.removeAfterAnimation(index, chipID);\n return;\n }\n\n if (animation === MDCChipAnimation.ENTER && isComplete &&\n addedAnnouncement) {\n this.adapter.announceMessage(addedAnnouncement);\n return;\n }\n }\n\n handleChipInteraction({detail}: ChipInteractionEvent) {\n const {source, chipID, isSelectable, isSelected, shouldRemove} = detail;\n const index = this.adapter.getChipIndexById(chipID);\n\n if (shouldRemove) {\n this.removeChip(index);\n return;\n }\n\n this.focusChip(index, source, MDCChipActionFocusBehavior.FOCUSABLE);\n this.adapter.emitEvent<MDCChipSetInteractionEventDetail>(\n MDCChipSetEvents.INTERACTION, {\n chipIndex: index,\n chipID,\n });\n\n if (isSelectable) {\n this.setSelection(index, source, !isSelected);\n }\n }\n\n handleChipNavigation({detail}: ChipNavigationEvent) {\n const {chipID, key, isRTL, source} = detail;\n const index = this.adapter.getChipIndexById(chipID);\n\n const toNextChip =\n (key === 'ArrowRight' && !isRTL) || (key === 'ArrowLeft' && isRTL);\n if (toNextChip) {\n // Start from the next chip so we increment the index\n this.focusNextChipFrom(index + 1);\n return;\n }\n\n const toPreviousChip =\n (key === 'ArrowLeft' && !isRTL) || (key === 'ArrowRight' && isRTL);\n if (toPreviousChip) {\n // Start from the previous chip so we decrement the index\n this.focusPrevChipFrom(index - 1);\n return;\n }\n\n if (key === 'ArrowDown') {\n // Start from the next chip so we increment the index\n this.focusNextChipFrom(index + 1, source);\n return;\n }\n\n if (key === 'ArrowUp') {\n // Start from the previous chip so we decrement the index\n this.focusPrevChipFrom(index - 1, source);\n return;\n }\n\n if (key === 'Home') {\n this.focusNextChipFrom(0, source);\n return;\n }\n\n if (key === 'End') {\n this.focusPrevChipFrom(this.adapter.getChipCount() - 1, source);\n return;\n }\n }\n\n /** Returns the unique selected indexes of the chips. */\n getSelectedChipIndexes(): ReadonlySet<number> {\n const selectedIndexes = new Set<number>();\n const chipCount = this.adapter.getChipCount();\n for (let i = 0; i < chipCount; i++) {\n const actions = this.adapter.getChipActionsAtIndex(i);\n for (const action of actions) {\n if (this.adapter.isChipSelectedAtIndex(i, action)) {\n selectedIndexes.add(i);\n }\n }\n }\n return selectedIndexes;\n }\n\n /** Sets the selected state of the chip at the given index and action. */\n setChipSelected(\n index: number, action: MDCChipActionType, isSelected: boolean) {\n if (this.adapter.isChipSelectableAtIndex(index, action)) {\n this.setSelection(index, action, isSelected);\n }\n }\n\n /** Returns the selected state of the chip at the given index and action. */\n isChipSelected(index: number, action: MDCChipActionType): boolean {\n return this.adapter.isChipSelectedAtIndex(index, action);\n }\n\n /** Removes the chip at the given index. */\n removeChip(index: number) {\n // Early exit if the index is out of bounds\n if (index >= this.adapter.getChipCount() || index < 0) return;\n this.adapter.startChipAnimationAtIndex(index, MDCChipAnimation.EXIT);\n this.adapter.emitEvent<MDCChipSetRemovalEventDetail>(\n MDCChipSetEvents.REMOVAL, {\n chipID: this.adapter.getChipIdAtIndex(index),\n chipIndex: index,\n isComplete: false,\n });\n }\n\n addChip(index: number) {\n // Early exit if the index is out of bounds\n if (index >= this.adapter.getChipCount() || index < 0) return;\n this.adapter.startChipAnimationAtIndex(index, MDCChipAnimation.ENTER);\n }\n\n /**\n * Increments to find the first focusable chip.\n */\n private focusNextChipFrom(\n startIndex: number, targetAction?: MDCChipActionType) {\n const chipCount = this.adapter.getChipCount();\n for (let i = startIndex; i < chipCount; i++) {\n const focusableAction =\n this.getFocusableAction(i, Operator.INCREMENT, targetAction);\n if (focusableAction) {\n this.focusChip(\n i, focusableAction,\n MDCChipActionFocusBehavior.FOCUSABLE_AND_FOCUSED);\n return;\n }\n }\n }\n\n /**\n * Decrements to find the first focusable chip. Takes an optional target\n * action that can be used to focus the first matching focusable action.\n */\n private focusPrevChipFrom(\n startIndex: number, targetAction?: MDCChipActionType) {\n for (let i = startIndex; i > -1; i--) {\n const focusableAction =\n this.getFocusableAction(i, Operator.DECREMENT, targetAction);\n if (focusableAction) {\n this.focusChip(\n i, focusableAction,\n MDCChipActionFocusBehavior.FOCUSABLE_AND_FOCUSED);\n return;\n }\n }\n }\n\n /** Returns the appropriate focusable action, or null if none exist. */\n private getFocusableAction(\n index: number, op: Operator,\n targetAction?: MDCChipActionType): MDCChipActionType|null {\n const actions = this.adapter.getChipActionsAtIndex(index);\n // Reverse the actions if decrementing\n if (op === Operator.DECREMENT) actions.reverse();\n\n if (targetAction) {\n return this.getMatchingFocusableAction(index, actions, targetAction);\n }\n\n return this.getFirstFocusableAction(index, actions);\n }\n\n /**\n * Returs the first focusable action, regardless of type, or null if no\n * focusable actions exist.\n */\n private getFirstFocusableAction(index: number, actions: MDCChipActionType[]):\n MDCChipActionType|null {\n for (const action of actions) {\n if (this.adapter.isChipFocusableAtIndex(index, action)) {\n return action;\n }\n }\n return null;\n }\n\n /**\n * If the actions contain a focusable action that matches the target action,\n * return that. Otherwise, return the first focusable action, or null if no\n * focusable action exists.\n */\n private getMatchingFocusableAction(\n index: number, actions: MDCChipActionType[],\n targetAction: MDCChipActionType): MDCChipActionType|null {\n let focusableAction = null;\n for (const action of actions) {\n if (this.adapter.isChipFocusableAtIndex(index, action)) {\n focusableAction = action;\n }\n\n // Exit and return the focusable action if it matches the target\n if (focusableAction === targetAction) {\n return focusableAction;\n }\n }\n return focusableAction;\n }\n\n private focusChip(\n index: number, action: MDCChipActionType,\n focus: MDCChipActionFocusBehavior) {\n this.adapter.setChipFocusAtIndex(index, action, focus);\n const chipCount = this.adapter.getChipCount();\n for (let i = 0; i < chipCount; i++) {\n const actions = this.adapter.getChipActionsAtIndex(i);\n for (const chipAction of actions) {\n // Skip the action and index provided since we set it above\n if (chipAction === action && i === index) continue;\n this.adapter.setChipFocusAtIndex(\n i, chipAction, MDCChipActionFocusBehavior.NOT_FOCUSABLE);\n }\n }\n }\n\n private supportsMultiSelect(): boolean {\n return this.adapter.getAttribute(\n MDCChipSetAttributes.ARIA_MULTISELECTABLE) === 'true';\n }\n\n private setSelection(\n index: number, action: MDCChipActionType, isSelected: boolean) {\n this.adapter.setChipSelectedAtIndex(index, action, isSelected);\n this.adapter.emitEvent<MDCChipSetSelectionEventDetail>(\n MDCChipSetEvents.SELECTION, {\n chipID: this.adapter.getChipIdAtIndex(index),\n chipIndex: index,\n isSelected,\n });\n // Early exit if we support multi-selection\n if (this.supportsMultiSelect()) {\n return;\n }\n\n // If we get here, we ony support single selection. This means we need to\n // unselect all chips\n const chipCount = this.adapter.getChipCount();\n for (let i = 0; i < chipCount; i++) {\n const actions = this.adapter.getChipActionsAtIndex(i);\n for (const chipAction of actions) {\n // Skip the action and index provided since we set it above\n if (chipAction === action && i === index) continue;\n this.adapter.setChipSelectedAtIndex(i, chipAction, false);\n }\n }\n }\n\n private removeAfterAnimation(index: number, chipID: string) {\n this.adapter.removeChipAtIndex(index);\n this.adapter.emitEvent<MDCChipSetRemovalEventDetail>(\n MDCChipSetEvents.REMOVAL, {\n chipIndex: index,\n isComplete: true,\n chipID,\n });\n\n const chipCount = this.adapter.getChipCount();\n // Early exit if we have an empty chip set\n if (chipCount <= 0) return;\n this.focusNearestFocusableAction(index);\n }\n\n /**\n * Find the first focusable action by moving bidirectionally horizontally\n * from the start index.\n *\n * Given chip set [A, B, C, D, E, F, G]...\n * Let's say we remove chip \"F\". We don't know where the nearest focusable\n * action is since any of them could be disabled. The nearest focusable\n * action could be E, it could be G, it could even be A. To find it, we\n * start from the source index (5 for \"F\" in this case) and move out\n * horizontally, checking each chip at each index.\n *\n */\n private focusNearestFocusableAction(index: number) {\n const chipCount = this.adapter.getChipCount();\n let decrIndex = index;\n let incrIndex = index;\n while (decrIndex > -1 || incrIndex < chipCount) {\n const focusAction = this.getNearestFocusableAction(\n decrIndex, incrIndex, MDCChipActionType.TRAILING);\n if (focusAction) {\n this.focusChip(\n focusAction.index, focusAction.action,\n MDCChipActionFocusBehavior.FOCUSABLE_AND_FOCUSED);\n return;\n }\n\n decrIndex--;\n incrIndex++;\n }\n }\n\n private getNearestFocusableAction(\n decrIndex: number, incrIndex: number,\n actionType?: MDCChipActionType): FocusAction|null {\n const decrAction =\n this.getFocusableAction(decrIndex, Operator.DECREMENT, actionType);\n if (decrAction) {\n return {\n index: decrIndex,\n action: decrAction,\n };\n }\n\n // Early exit if the incremented and decremented indices are identical\n if (incrIndex === decrIndex) return null;\n\n const incrAction =\n this.getFocusableAction(incrIndex, Operator.INCREMENT, actionType);\n if (incrAction) {\n return {\n index: incrIndex,\n action: incrAction,\n };\n }\n\n return null;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"foundation.js","sourceRoot":"","sources":["foundation.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 {MDCChipActionFocusBehavior, MDCChipActionType} from '../../action/lib/constants.js';\nimport {MDCChipAnimation} from '../../chip/lib/constants.js';\n\nimport {MDCChipSetAdapter} from './adapter.js';\nimport {MDCChipSetAttributes, MDCChipSetEvents} from './constants.js';\nimport {ChipAnimationEvent, ChipInteractionEvent, ChipNavigationEvent, MDCChipSetInteractionEventDetail, MDCChipSetRemovalEventDetail, MDCChipSetSelectionEventDetail} from './types.js';\n\ninterface FocusAction {\n action: MDCChipActionType;\n index: number;\n}\n\nenum Operator {\n INCREMENT,\n DECREMENT,\n}\n\n/**\n * MDCChipSetFoundation provides a foundation for all chips.\n */\nexport class MDCChipSetFoundation {\n private readonly adapter: MDCChipSetAdapter;\n\n static get defaultAdapter(): MDCChipSetAdapter {\n return {\n announceMessage: () => undefined,\n emitEvent: () => undefined,\n getAttribute: () => null,\n getChipActionsAtIndex: () => [],\n getChipCount: () => 0,\n getChipIdAtIndex: () => '',\n getChipIndexById: () => 0,\n isChipFocusableAtIndex: () => false,\n isChipSelectableAtIndex: () => false,\n isChipSelectedAtIndex: () => false,\n removeChipAtIndex: () => {},\n setChipFocusAtIndex: () => undefined,\n setChipSelectedAtIndex: () => undefined,\n startChipAnimationAtIndex: () => undefined,\n };\n }\n\n constructor(adapter?: Partial<MDCChipSetAdapter>) {\n this.adapter = {...MDCChipSetFoundation.defaultAdapter, ...adapter};\n }\n\n handleChipAnimation({detail}: ChipAnimationEvent) {\n const {\n chipID,\n animation,\n isComplete,\n addedAnnouncement,\n removedAnnouncement\n } = detail;\n const index = this.adapter.getChipIndexById(chipID);\n\n if (animation === MDCChipAnimation.EXIT && isComplete) {\n if (removedAnnouncement) {\n this.adapter.announceMessage(removedAnnouncement);\n }\n this.removeAfterAnimation(index, chipID);\n return;\n }\n\n if (animation === MDCChipAnimation.ENTER && isComplete &&\n addedAnnouncement) {\n this.adapter.announceMessage(addedAnnouncement);\n return;\n }\n }\n\n handleChipInteraction({detail}: ChipInteractionEvent) {\n const {source, chipID, isSelectable, isSelected, shouldRemove} = detail;\n const index = this.adapter.getChipIndexById(chipID);\n\n if (shouldRemove) {\n this.removeChip(index);\n return;\n }\n\n this.focusChip(index, source, MDCChipActionFocusBehavior.FOCUSABLE);\n this.adapter.emitEvent<MDCChipSetInteractionEventDetail>(\n MDCChipSetEvents.INTERACTION, {\n chipIndex: index,\n chipID,\n });\n\n if (isSelectable) {\n this.setSelection(index, source, !isSelected);\n }\n }\n\n handleChipNavigation({detail}: ChipNavigationEvent) {\n const {chipID, key, isRTL, source} = detail;\n const index = this.adapter.getChipIndexById(chipID);\n\n const toNextChip =\n (key === 'ArrowRight' && !isRTL) || (key === 'ArrowLeft' && isRTL);\n if (toNextChip) {\n // Start from the next chip so we increment the index\n this.focusNextChipFrom(index + 1);\n return;\n }\n\n const toPreviousChip =\n (key === 'ArrowLeft' && !isRTL) || (key === 'ArrowRight' && isRTL);\n if (toPreviousChip) {\n // Start from the previous chip so we decrement the index\n this.focusPrevChipFrom(index - 1);\n return;\n }\n\n if (key === 'ArrowDown') {\n // Start from the next chip so we increment the index\n this.focusNextChipFrom(index + 1, source);\n return;\n }\n\n if (key === 'ArrowUp') {\n // Start from the previous chip so we decrement the index\n this.focusPrevChipFrom(index - 1, source);\n return;\n }\n\n if (key === 'Home') {\n this.focusNextChipFrom(0, source);\n return;\n }\n\n if (key === 'End') {\n this.focusPrevChipFrom(this.adapter.getChipCount() - 1, source);\n return;\n }\n }\n\n /** Returns the unique selected indexes of the chips. */\n getSelectedChipIndexes(): ReadonlySet<number> {\n const selectedIndexes = new Set<number>();\n const chipCount = this.adapter.getChipCount();\n for (let i = 0; i < chipCount; i++) {\n const actions = this.adapter.getChipActionsAtIndex(i);\n for (const action of actions) {\n if (this.adapter.isChipSelectedAtIndex(i, action)) {\n selectedIndexes.add(i);\n }\n }\n }\n return selectedIndexes;\n }\n\n /** Sets the selected state of the chip at the given index and action. */\n setChipSelected(\n index: number, action: MDCChipActionType, isSelected: boolean) {\n if (this.adapter.isChipSelectableAtIndex(index, action)) {\n this.setSelection(index, action, isSelected);\n }\n }\n\n /** Returns the selected state of the chip at the given index and action. */\n isChipSelected(index: number, action: MDCChipActionType): boolean {\n return this.adapter.isChipSelectedAtIndex(index, action);\n }\n\n /** Removes the chip at the given index. */\n removeChip(index: number) {\n // Early exit if the index is out of bounds\n if (index >= this.adapter.getChipCount() || index < 0) return;\n this.adapter.startChipAnimationAtIndex(index, MDCChipAnimation.EXIT);\n this.adapter.emitEvent<MDCChipSetRemovalEventDetail>(\n MDCChipSetEvents.REMOVAL, {\n chipID: this.adapter.getChipIdAtIndex(index),\n chipIndex: index,\n isComplete: false,\n });\n }\n\n addChip(index: number) {\n // Early exit if the index is out of bounds\n if (index >= this.adapter.getChipCount() || index < 0) return;\n this.adapter.startChipAnimationAtIndex(index, MDCChipAnimation.ENTER);\n }\n\n /**\n * Increments to find the first focusable chip.\n */\n private focusNextChipFrom(\n startIndex: number, targetAction?: MDCChipActionType) {\n const chipCount = this.adapter.getChipCount();\n for (let i = startIndex; i < chipCount; i++) {\n const focusableAction =\n this.getFocusableAction(i, Operator.INCREMENT, targetAction);\n if (focusableAction) {\n this.focusChip(\n i, focusableAction,\n MDCChipActionFocusBehavior.FOCUSABLE_AND_FOCUSED);\n return;\n }\n }\n }\n\n /**\n * Decrements to find the first focusable chip. Takes an optional target\n * action that can be used to focus the first matching focusable action.\n */\n private focusPrevChipFrom(\n startIndex: number, targetAction?: MDCChipActionType) {\n for (let i = startIndex; i > -1; i--) {\n const focusableAction =\n this.getFocusableAction(i, Operator.DECREMENT, targetAction);\n if (focusableAction) {\n this.focusChip(\n i, focusableAction,\n MDCChipActionFocusBehavior.FOCUSABLE_AND_FOCUSED);\n return;\n }\n }\n }\n\n /** Returns the appropriate focusable action, or null if none exist. */\n private getFocusableAction(\n index: number, op: Operator,\n targetAction?: MDCChipActionType): MDCChipActionType|null {\n const actions = this.adapter.getChipActionsAtIndex(index);\n // Reverse the actions if decrementing\n if (op === Operator.DECREMENT) actions.reverse();\n\n if (targetAction) {\n return this.getMatchingFocusableAction(index, actions, targetAction);\n }\n\n return this.getFirstFocusableAction(index, actions);\n }\n\n /**\n * Returs the first focusable action, regardless of type, or null if no\n * focusable actions exist.\n */\n private getFirstFocusableAction(index: number, actions: MDCChipActionType[]):\n MDCChipActionType|null {\n for (const action of actions) {\n if (this.adapter.isChipFocusableAtIndex(index, action)) {\n return action;\n }\n }\n return null;\n }\n\n /**\n * If the actions contain a focusable action that matches the target action,\n * return that. Otherwise, return the first focusable action, or null if no\n * focusable action exists.\n */\n private getMatchingFocusableAction(\n index: number, actions: MDCChipActionType[],\n targetAction: MDCChipActionType): MDCChipActionType|null {\n let focusableAction = null;\n for (const action of actions) {\n if (this.adapter.isChipFocusableAtIndex(index, action)) {\n focusableAction = action;\n }\n\n // Exit and return the focusable action if it matches the target\n if (focusableAction === targetAction) {\n return focusableAction;\n }\n }\n return focusableAction;\n }\n\n private focusChip(\n index: number, action: MDCChipActionType,\n focus: MDCChipActionFocusBehavior) {\n this.adapter.setChipFocusAtIndex(index, action, focus);\n const chipCount = this.adapter.getChipCount();\n for (let i = 0; i < chipCount; i++) {\n const actions = this.adapter.getChipActionsAtIndex(i);\n for (const chipAction of actions) {\n // Skip the action and index provided since we set it above\n if (chipAction === action && i === index) continue;\n this.adapter.setChipFocusAtIndex(\n i, chipAction, MDCChipActionFocusBehavior.NOT_FOCUSABLE);\n }\n }\n }\n\n private supportsMultiSelect(): boolean {\n return this.adapter.getAttribute(\n MDCChipSetAttributes.ARIA_MULTISELECTABLE) === 'true';\n }\n\n private setSelection(\n index: number, action: MDCChipActionType, isSelected: boolean) {\n this.adapter.setChipSelectedAtIndex(index, action, isSelected);\n this.adapter.emitEvent<MDCChipSetSelectionEventDetail>(\n MDCChipSetEvents.SELECTION, {\n chipID: this.adapter.getChipIdAtIndex(index),\n chipIndex: index,\n isSelected,\n });\n // Early exit if we support multi-selection\n if (this.supportsMultiSelect()) {\n return;\n }\n\n // If we get here, we ony support single selection. This means we need to\n // unselect all chips\n const chipCount = this.adapter.getChipCount();\n for (let i = 0; i < chipCount; i++) {\n const actions = this.adapter.getChipActionsAtIndex(i);\n for (const chipAction of actions) {\n // Skip the action and index provided since we set it above\n if (chipAction === action && i === index) continue;\n this.adapter.setChipSelectedAtIndex(i, chipAction, false);\n }\n }\n }\n\n private removeAfterAnimation(index: number, chipID: string) {\n this.adapter.removeChipAtIndex(index);\n this.adapter.emitEvent<MDCChipSetRemovalEventDetail>(\n MDCChipSetEvents.REMOVAL, {\n chipIndex: index,\n isComplete: true,\n chipID,\n });\n\n const chipCount = this.adapter.getChipCount();\n // Early exit if we have an empty chip set\n if (chipCount <= 0) return;\n this.focusNearestFocusableAction(index);\n }\n\n /**\n * Find the first focusable action by moving bidirectionally horizontally\n * from the start index.\n *\n * Given chip set [A, B, C, D, E, F, G]...\n * Let's say we remove chip \"F\". We don't know where the nearest focusable\n * action is since any of them could be disabled. The nearest focusable\n * action could be E, it could be G, it could even be A. To find it, we\n * start from the source index (5 for \"F\" in this case) and move out\n * horizontally, checking each chip at each index.\n *\n */\n private focusNearestFocusableAction(index: number) {\n const chipCount = this.adapter.getChipCount();\n let decrIndex = index;\n let incrIndex = index;\n while (decrIndex > -1 || incrIndex < chipCount) {\n const focusAction = this.getNearestFocusableAction(\n decrIndex, incrIndex, MDCChipActionType.TRAILING);\n if (focusAction) {\n this.focusChip(\n focusAction.index, focusAction.action,\n MDCChipActionFocusBehavior.FOCUSABLE_AND_FOCUSED);\n return;\n }\n\n decrIndex--;\n incrIndex++;\n }\n }\n\n private getNearestFocusableAction(\n decrIndex: number, incrIndex: number,\n actionType?: MDCChipActionType): FocusAction|null {\n const decrAction =\n this.getFocusableAction(decrIndex, Operator.DECREMENT, actionType);\n if (decrAction) {\n return {\n index: decrIndex,\n action: decrAction,\n };\n }\n\n // Early exit if the incremented and decremented indices are identical\n if (incrIndex === decrIndex) return null;\n\n const incrAction =\n this.getFocusableAction(incrIndex, Operator.INCREMENT, actionType);\n if (incrAction) {\n return {\n index: incrIndex,\n action: incrAction,\n };\n }\n\n return null;\n }\n}\n"]}
|
|
@@ -30,12 +30,12 @@ export interface MDCChipSetSelectionEventDetail {
|
|
|
30
30
|
/**
|
|
31
31
|
* ChipInteractionEvent is the custom event for the interaction event.
|
|
32
32
|
*/
|
|
33
|
-
export
|
|
33
|
+
export type ChipInteractionEvent = CustomEvent<MDCChipInteractionEventDetail>;
|
|
34
34
|
/**
|
|
35
35
|
* ChipNavigationEvent is the custom event for the navigation event.
|
|
36
36
|
*/
|
|
37
|
-
export
|
|
37
|
+
export type ChipNavigationEvent = CustomEvent<MDCChipNavigationEventDetail>;
|
|
38
38
|
/**
|
|
39
39
|
* ChipAnimationEvent is the custom event for the animation event.
|
|
40
40
|
*/
|
|
41
|
-
export
|
|
41
|
+
export type ChipAnimationEvent = CustomEvent<MDCChipAnimationEventDetail>;
|
package/controller/events.js
CHANGED
|
@@ -92,6 +92,10 @@ export function dispatchActivationClick(element) {
|
|
|
92
92
|
*/
|
|
93
93
|
export function isActivationClick(event) {
|
|
94
94
|
// Event must start at the event target.
|
|
95
|
+
if (event.currentTarget !== event.target) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
// Event must not be retargeted from shadowRoot.
|
|
95
99
|
if (event.composedPath()[0] !== event.target) {
|
|
96
100
|
return false;
|
|
97
101
|
}
|
package/controller/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,KAAY;IAC5D,6EAA6E;IAC7E,yBAAyB;IACzB,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QAC5D,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE;QACf,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAoB;IAC1D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IACvD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,wCAAwC;IACxC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;QAC5C,OAAO,KAAK,CAAC;KACd;IACD,0EAA0E;IAC1E,oBAAoB;IACpB,IAAK,KAAK,CAAC,MAA4C,CAAC,QAAQ,EAAE;QAChE,OAAO,KAAK,CAAC;KACd;IACD,8DAA8D;IAC9D,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,6DAA6D;AAC7D,yCAAyC;AACzC,SAAS,YAAY,CAAC,KAAY;IAChC,MAAM,SAAS,GAAG,kBAAkB,CAAC;IACrC,IAAI,SAAS,EAAE;QACb,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;KAClC;IACD,yBAAyB,EAAE,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wCAAwC;AACxC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,KAAK,UAAU,yBAAyB;IACtC,kBAAkB,GAAG,IAAI,CAAC;IAC1B,wCAAwC;IACxC,2BAA2B;IAC3B,MAAM,IAAI,CAAC;IACX,kBAAkB,GAAG,KAAK,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Re-dispatches an event from the provided element.\n *\n * This function is useful for forwarding non-composed events, such as `change`\n * events.\n *\n * @example\n * class MyInput extends LitElement {\n * render() {\n * return html`<input @change=${this.redispatchEvent}>`;\n * }\n *\n * protected redispatchEvent(event: Event) {\n * redispatchEvent(this, event);\n * }\n * }\n *\n * @param element The element to dispatch the event from.\n * @param event The event to re-dispatch.\n * @return Whether or not the event was dispatched (if cancelable).\n */\nexport function redispatchEvent(element: Element, event: Event) {\n // For bubbling events in SSR light DOM (or composed), stop their propagation\n // and dispatch the copy.\n if (event.bubbles && (!element.shadowRoot || event.composed)) {\n event.stopPropagation();\n }\n\n const copy = Reflect.construct(event.constructor, [event.type, event]);\n const dispatched = element.dispatchEvent(copy);\n if (!dispatched) {\n event.preventDefault();\n }\n\n return dispatched;\n}\n\n/**\n * Dispatches a click event to the given element that triggers a native action,\n * but is not composed and therefore is not seen outside the element.\n *\n * This is useful for responding to an external click event on the host element\n * that should trigger an internal action like a button click.\n *\n * Note, a helper is provided because setting this up correctly is a bit tricky.\n * In particular, calling `click` on an element creates a composed event, which\n * is not desirable, and a manually dispatched event must specifically be a\n * `MouseEvent` to trigger a native action.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function dispatchActivationClick(element: HTMLElement) {\n const event = new MouseEvent('click', {bubbles: true});\n element.dispatchEvent(event);\n return event;\n}\n\n/**\n * Returns true if the click event should trigger an activation behavior. The\n * behavior is defined by the element and is whatever it should do when\n * clicked.\n *\n * Typically when an element needs to handle a click, the click is generated\n * from within the element and an event listener within the element implements\n * the needed behavior; however, it's possible to fire a click directly\n * at the element that the element should handle. This method helps\n * distinguish these \"external\" clicks.\n *\n * An \"external\" click can be triggered in a number of ways: via a click\n * on an associated label for a form associated element, calling\n * `element.click()`, or calling\n * `element.dispatchEvent(new MouseEvent('click', ...))`.\n *\n * Also works around Firefox issue\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1804576 by squelching\n * events for a microtask after called.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function isActivationClick(event: Event) {\n // Event must start at the event target.\n if (event.composedPath()[0] !== event.target) {\n return false;\n }\n // Target must not be disabled; this should only occur for a synthetically\n // dispatched click.\n if ((event.target as EventTarget & {disabled: boolean}).disabled) {\n return false;\n }\n // This is an activation if the event should not be squelched.\n return !squelchEvent(event);\n}\n\n// TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1804576)\n// Remove when Firefox bug is addressed.\nfunction squelchEvent(event: Event) {\n const squelched = isSquelchingEvents;\n if (squelched) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n squelchEventsForMicrotask();\n return squelched;\n}\n\n// Ignore events for one microtask only.\nlet isSquelchingEvents = false;\nasync function squelchEventsForMicrotask() {\n isSquelchingEvents = true;\n // Need to pause for just one microtask.\n // tslint:disable-next-line\n await null;\n isSquelchingEvents = false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,KAAY;IAC5D,6EAA6E;IAC7E,yBAAyB;IACzB,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QAC5D,KAAK,CAAC,eAAe,EAAE,CAAC;KACzB;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE;QACf,KAAK,CAAC,cAAc,EAAE,CAAC;KACxB;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAoB;IAC1D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;IACvD,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAY;IAC5C,wCAAwC;IACxC,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE;QACxC,OAAO,KAAK,CAAC;KACd;IACD,gDAAgD;IAChD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;QAC5C,OAAO,KAAK,CAAC;KACd;IACD,0EAA0E;IAC1E,oBAAoB;IACpB,IAAK,KAAK,CAAC,MAA4C,CAAC,QAAQ,EAAE;QAChE,OAAO,KAAK,CAAC;KACd;IACD,8DAA8D;IAC9D,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,6DAA6D;AAC7D,yCAAyC;AACzC,SAAS,YAAY,CAAC,KAAY;IAChC,MAAM,SAAS,GAAG,kBAAkB,CAAC;IACrC,IAAI,SAAS,EAAE;QACb,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,wBAAwB,EAAE,CAAC;KAClC;IACD,yBAAyB,EAAE,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wCAAwC;AACxC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,KAAK,UAAU,yBAAyB;IACtC,kBAAkB,GAAG,IAAI,CAAC;IAC1B,wCAAwC;IACxC,2BAA2B;IAC3B,MAAM,IAAI,CAAC;IACX,kBAAkB,GAAG,KAAK,CAAC;AAC7B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Re-dispatches an event from the provided element.\n *\n * This function is useful for forwarding non-composed events, such as `change`\n * events.\n *\n * @example\n * class MyInput extends LitElement {\n * render() {\n * return html`<input @change=${this.redispatchEvent}>`;\n * }\n *\n * protected redispatchEvent(event: Event) {\n * redispatchEvent(this, event);\n * }\n * }\n *\n * @param element The element to dispatch the event from.\n * @param event The event to re-dispatch.\n * @return Whether or not the event was dispatched (if cancelable).\n */\nexport function redispatchEvent(element: Element, event: Event) {\n // For bubbling events in SSR light DOM (or composed), stop their propagation\n // and dispatch the copy.\n if (event.bubbles && (!element.shadowRoot || event.composed)) {\n event.stopPropagation();\n }\n\n const copy = Reflect.construct(event.constructor, [event.type, event]);\n const dispatched = element.dispatchEvent(copy);\n if (!dispatched) {\n event.preventDefault();\n }\n\n return dispatched;\n}\n\n/**\n * Dispatches a click event to the given element that triggers a native action,\n * but is not composed and therefore is not seen outside the element.\n *\n * This is useful for responding to an external click event on the host element\n * that should trigger an internal action like a button click.\n *\n * Note, a helper is provided because setting this up correctly is a bit tricky.\n * In particular, calling `click` on an element creates a composed event, which\n * is not desirable, and a manually dispatched event must specifically be a\n * `MouseEvent` to trigger a native action.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function dispatchActivationClick(element: HTMLElement) {\n const event = new MouseEvent('click', {bubbles: true});\n element.dispatchEvent(event);\n return event;\n}\n\n/**\n * Returns true if the click event should trigger an activation behavior. The\n * behavior is defined by the element and is whatever it should do when\n * clicked.\n *\n * Typically when an element needs to handle a click, the click is generated\n * from within the element and an event listener within the element implements\n * the needed behavior; however, it's possible to fire a click directly\n * at the element that the element should handle. This method helps\n * distinguish these \"external\" clicks.\n *\n * An \"external\" click can be triggered in a number of ways: via a click\n * on an associated label for a form associated element, calling\n * `element.click()`, or calling\n * `element.dispatchEvent(new MouseEvent('click', ...))`.\n *\n * Also works around Firefox issue\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1804576 by squelching\n * events for a microtask after called.\n *\n * @example\n * hostClickListener = (event: MouseEvent) {\n * if (isActivationClick(event)) {\n * this.dispatchActivationClick(this.buttonElement);\n * }\n * }\n *\n */\nexport function isActivationClick(event: Event) {\n // Event must start at the event target.\n if (event.currentTarget !== event.target) {\n return false;\n }\n // Event must not be retargeted from shadowRoot.\n if (event.composedPath()[0] !== event.target) {\n return false;\n }\n // Target must not be disabled; this should only occur for a synthetically\n // dispatched click.\n if ((event.target as EventTarget & {disabled: boolean}).disabled) {\n return false;\n }\n // This is an activation if the event should not be squelched.\n return !squelchEvent(event);\n}\n\n// TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1804576)\n// Remove when Firefox bug is addressed.\nfunction squelchEvent(event: Event) {\n const squelched = isSquelchingEvents;\n if (squelched) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n squelchEventsForMicrotask();\n return squelched;\n}\n\n// Ignore events for one microtask only.\nlet isSquelchingEvents = false;\nasync function squelchEventsForMicrotask() {\n isSquelchingEvents = true;\n // Need to pause for just one microtask.\n // tslint:disable-next-line\n await null;\n isSquelchingEvents = false;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form-controller.js","sourceRoot":"","sources":["form-controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAIH,OAAO,EAAC,KAAK,EAAC,MAAM,wBAAwB,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAE,mBAAmB,EAAC,MAAM,4BAA4B,CAAC;AAkCjF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IAGzB;;;;OAIG;IACH,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAErD,aAAa;QACX,wEAAwE;QACxE,0EAA0E;QAC1E,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE;YACtD,OAAO;SACR;QAED,wEAAwE;QACxE,iCAAiC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE/D,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC1D,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAA2B,CAAC,CAAC;SACvE;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpE,CAAC;IAGO,gBAAgB,CAAC,KAAoB;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB,sEAAsE;YACtE,OAAO;SACR;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,sEAAsE;QACtE,wEAAwE;QACxE,QAAQ;QACR,IAAI,KAAK,YAAY,QAAQ,EAAE;YAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE;gBACpC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;aACvC;YACD,OAAO;SACR;QAED,4EAA4E;QAC5E,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACxC,OAAO;SACR;QAED,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"form-controller.js","sourceRoot":"","sources":["form-controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAIH,OAAO,EAAC,KAAK,EAAC,MAAM,wBAAwB,CAAC;AAE7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAE,mBAAmB,EAAC,MAAM,4BAA4B,CAAC;AAkCjF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,OAAO,cAAc;IAGzB;;;;OAIG;IACH,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAErD,aAAa;QACX,wEAAwE;QACxE,0EAA0E;QAC1E,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE;YACtD,OAAO;SACR;QAED,wEAAwE;QACxE,iCAAiC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE/D,uEAAuE;QACvE,2CAA2C;QAC3C,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC1D,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAA2B,CAAC,CAAC;SACvE;IACH,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpE,CAAC;IAGO,gBAAgB,CAAC,KAAoB;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB,sEAAsE;YACtE,OAAO;SACR;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,sEAAsE;QACtE,wEAAwE;QACxE,QAAQ;QACR,IAAI,KAAK,YAAY,QAAQ,EAAE;YAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE;gBACpC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;aACvC;YACD,OAAO;SACR;QAED,4EAA4E;QAC5E,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACxC,OAAO;SACR;QAED,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;CACF;AAzBC;IAAC,KAAK;;qCAC0B,aAAa;;sDAuB5C","sourcesContent":["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ReactiveController, ReactiveControllerHost} from 'lit';\n\nimport {bound} from '../decorators/bound.js';\n\nimport {isFormAssociated} from './form-associated.js';\nimport {shimLabelSupport, SUPPORTS_FACE_LABEL} from './shim-label-activation.js';\n\ndeclare global {\n interface Window {\n ShadyDOM?: {inUse: boolean;};\n }\n}\n\n/**\n * An element that `FormController` may use.\n */\nexport interface FormElement extends ReactiveControllerHost, HTMLElement {\n /**\n * The `<form>` that this element is associated with.\n */\n readonly form: HTMLFormElement|null;\n /**\n * The name of the element in the form. This property should reflect to a\n * `name` attribute.\n */\n name: string;\n /**\n * Whether or not this element is disabled. If present, this property should\n * reflect to a `disabled` attribute.\n */\n disabled?: boolean;\n /**\n * A function that retrieves the current form value for this element.\n *\n * @return The current form value, or `null` if there is no value.\n */\n [getFormValue](): string|File|FormData|null;\n}\n\n/**\n * A unique symbol key for `FormController` elements to implement their\n * `getFormValue()` function.\n */\nexport const getFormValue = Symbol('getFormValue');\n\n/**\n * A `ReactiveController` that adds `<form>` support to an element.\n *\n * Elements should also set `static formAssociated = true` which\n * provides platform support for forms. When an element is form associated,\n * it can be activated via clicks on associated label elements. It is the\n * responsibility of the element to process this click and perform any necessary\n * activation tasks, for example focusing and clicking on an internal element.\n *\n */\nexport class FormController implements ReactiveController {\n private form?: HTMLFormElement|null;\n\n /**\n * Creates a new `FormController` for the given element.\n *\n * @param element The element to add `<form>` support to.\n */\n constructor(private readonly element: FormElement) {}\n\n hostConnected() {\n // If the component internals are not in Shadow DOM, subscribing to form\n // data events could lead to duplicated data, which may not work correctly\n // on the server side.\n if (!this.element.shadowRoot || window.ShadyDOM?.inUse) {\n return;\n }\n\n // Preserve a reference to the form, since on hostDisconnected it may be\n // null if the child was removed.\n this.form = this.element.form;\n this.form?.addEventListener('formdata', this.formDataListener);\n\n // TODO(b/261871554) Label activation shim is currently only needed for\n // Safari. Remove it when no longer needed.\n if (isFormAssociated(this.element) && !SUPPORTS_FACE_LABEL) {\n shimLabelSupport(this.element.getRootNode() as Document | ShadowRoot);\n }\n }\n\n hostDisconnected() {\n this.form?.removeEventListener('formdata', this.formDataListener);\n }\n\n @bound\n private formDataListener(event: FormDataEvent) {\n if (this.element.disabled) {\n // Check for truthiness since some elements may not support disabling.\n return;\n }\n\n const value = this.element[getFormValue]();\n // If given a `FormData` instance, append all values to the form. This\n // allows elements to customize what is added beyond a single name/value\n // pair.\n if (value instanceof FormData) {\n for (const [key, dataValue] of value) {\n event.formData.append(key, dataValue);\n }\n return;\n }\n\n // Do not associate the value with the form if there is no value or no name.\n if (value === null || !this.element.name) {\n return;\n }\n\n event.formData.append(this.element.name, value);\n }\n}\n"]}
|
|
@@ -21,4 +21,4 @@ export interface FoundationConstructor<Adapter extends object> {
|
|
|
21
21
|
/**
|
|
22
22
|
* Retrieves the adapter type from the provided foundation type.
|
|
23
23
|
*/
|
|
24
|
-
export
|
|
24
|
+
export type AdapterOf<FoundationType> = FoundationType extends Foundation<infer A> ? A : never;
|
package/controller/observer.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* @param current - The current value of the property.
|
|
13
13
|
* @param previous - The previous value of the property.
|
|
14
14
|
*/
|
|
15
|
-
export
|
|
15
|
+
export type Observer<T extends object, K extends keyof T = keyof T, This = unknown> = (this: This, current: T[K], previous: T[K]) => void;
|
|
16
16
|
/**
|
|
17
17
|
* An object map whose keys are properties of a target to observe and values
|
|
18
18
|
* are `Observer` functions for each property.
|
|
@@ -20,7 +20,7 @@ export declare type Observer<T extends object, K extends keyof T = keyof T, This
|
|
|
20
20
|
* @template T The observed target type.
|
|
21
21
|
* @template This The `this` context of observer functions.
|
|
22
22
|
*/
|
|
23
|
-
export
|
|
23
|
+
export type ObserverRecord<T extends object, This = unknown> = {
|
|
24
24
|
[K in keyof T]?: Observer<T, K, This>;
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Dialog } from './lib/dialog.js';
|
|
7
|
+
declare global {
|
|
8
|
+
interface HTMLElementTagNameMap {
|
|
9
|
+
'md-dialog': MdDialog;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @summary Dialogs can require an action, communicate information, or help
|
|
14
|
+
* users accomplish a task. There are two types of dialogs: basic and
|
|
15
|
+
* full-screen.
|
|
16
|
+
*
|
|
17
|
+
* @description
|
|
18
|
+
* A dialog is a modal window that appears in front of app content to provide
|
|
19
|
+
* critical information or ask for a decision. Dialogs disable all app
|
|
20
|
+
* functionality when they appear, and remain on screen until confirmed,
|
|
21
|
+
* dismissed, or a required action has been taken.
|
|
22
|
+
*
|
|
23
|
+
* Dialogs are purposefully interruptive, so they should be used sparingly.
|
|
24
|
+
* A less disruptive alternative is to use a menu, which provides options
|
|
25
|
+
* without interrupting a user’s experience.
|
|
26
|
+
*
|
|
27
|
+
* On mobile devices only, complex dialogs should be displayed fullscreen.
|
|
28
|
+
*
|
|
29
|
+
* __Example usages:__
|
|
30
|
+
* - Common use cases for basic dialogs include alerts, quick selection, and
|
|
31
|
+
* confirmation.
|
|
32
|
+
* - More complex dialogs may contain actions that require a series of tasks
|
|
33
|
+
* to complete. One example is creating a calendar entry with the event title,
|
|
34
|
+
* date, location, and time.
|
|
35
|
+
*/
|
|
36
|
+
export declare class MdDialog extends Dialog {
|
|
37
|
+
static styles: import("lit").CSSResult[];
|
|
38
|
+
}
|
package/dialog/dialog.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { __decorate } from "tslib";
|
|
7
|
+
import { customElement } from 'lit/decorators.js';
|
|
8
|
+
import { Dialog } from './lib/dialog.js';
|
|
9
|
+
import { styles } from './lib/dialog-styles.css.js';
|
|
10
|
+
/**
|
|
11
|
+
* @summary Dialogs can require an action, communicate information, or help
|
|
12
|
+
* users accomplish a task. There are two types of dialogs: basic and
|
|
13
|
+
* full-screen.
|
|
14
|
+
*
|
|
15
|
+
* @description
|
|
16
|
+
* A dialog is a modal window that appears in front of app content to provide
|
|
17
|
+
* critical information or ask for a decision. Dialogs disable all app
|
|
18
|
+
* functionality when they appear, and remain on screen until confirmed,
|
|
19
|
+
* dismissed, or a required action has been taken.
|
|
20
|
+
*
|
|
21
|
+
* Dialogs are purposefully interruptive, so they should be used sparingly.
|
|
22
|
+
* A less disruptive alternative is to use a menu, which provides options
|
|
23
|
+
* without interrupting a user’s experience.
|
|
24
|
+
*
|
|
25
|
+
* On mobile devices only, complex dialogs should be displayed fullscreen.
|
|
26
|
+
*
|
|
27
|
+
* __Example usages:__
|
|
28
|
+
* - Common use cases for basic dialogs include alerts, quick selection, and
|
|
29
|
+
* confirmation.
|
|
30
|
+
* - More complex dialogs may contain actions that require a series of tasks
|
|
31
|
+
* to complete. One example is creating a calendar entry with the event title,
|
|
32
|
+
* date, location, and time.
|
|
33
|
+
*/
|
|
34
|
+
let MdDialog = class MdDialog extends Dialog {
|
|
35
|
+
};
|
|
36
|
+
MdDialog.styles = [styles];
|
|
37
|
+
MdDialog = __decorate([
|
|
38
|
+
customElement('md-dialog')
|
|
39
|
+
], MdDialog);
|
|
40
|
+
export { MdDialog };
|
|
41
|
+
//# sourceMappingURL=dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAC,MAAM,EAAC,MAAM,4BAA4B,CAAC;AAQlD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEI,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,MAAM;;AAClB,eAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AADvB,QAAQ;IADpB,aAAa,CAAC,WAAW,CAAC;GACd,QAAQ,CAEpB;SAFY,QAAQ","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {customElement} from 'lit/decorators.js';\n\nimport {Dialog} from './lib/dialog.js';\nimport {styles} from './lib/dialog-styles.css.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'md-dialog': MdDialog;\n }\n}\n\n/**\n * @summary Dialogs can require an action, communicate information, or help\n * users accomplish a task. There are two types of dialogs: basic and\n * full-screen.\n *\n * @description\n * A dialog is a modal window that appears in front of app content to provide\n * critical information or ask for a decision. Dialogs disable all app\n * functionality when they appear, and remain on screen until confirmed,\n * dismissed, or a required action has been taken.\n *\n * Dialogs are purposefully interruptive, so they should be used sparingly.\n * A less disruptive alternative is to use a menu, which provides options\n * without interrupting a user’s experience.\n *\n * On mobile devices only, complex dialogs should be displayed fullscreen.\n *\n * __Example usages:__\n * - Common use cases for basic dialogs include alerts, quick selection, and\n * confirmation.\n * - More complex dialogs may contain actions that require a series of tasks\n * to complete. One example is creating a calendar entry with the event title,\n * date, location, and time.\n */\n@customElement('md-dialog')\nexport class MdDialog extends Dialog {\n static override styles = [styles];\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Harness } from '../testing/harness.js';
|
|
7
|
+
import { Dialog } from './lib/dialog.js';
|
|
8
|
+
/**
|
|
9
|
+
* Test harness for dialog.
|
|
10
|
+
*/
|
|
11
|
+
export declare class DialogHarness extends Harness<Dialog> {
|
|
12
|
+
getInteractiveElement(): Promise<HTMLDialogElement>;
|
|
13
|
+
isOpening(): boolean;
|
|
14
|
+
isClosing(): boolean;
|
|
15
|
+
transitionComplete(): Promise<void>;
|
|
16
|
+
isDialogVisible(): Promise<boolean>;
|
|
17
|
+
isScrimVisible(): Promise<boolean>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2023 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Harness } from '../testing/harness.js';
|
|
7
|
+
/**
|
|
8
|
+
* Test harness for dialog.
|
|
9
|
+
*/
|
|
10
|
+
export class DialogHarness extends Harness {
|
|
11
|
+
async getInteractiveElement() {
|
|
12
|
+
await this.element.updateComplete;
|
|
13
|
+
return this.element.renderRoot.querySelector('.dialog');
|
|
14
|
+
}
|
|
15
|
+
isOpening() {
|
|
16
|
+
// Test access to state
|
|
17
|
+
// tslint:disable-next-line:no-dict-access-on-struct-type
|
|
18
|
+
return Boolean(this.element.open && this.element['opening']);
|
|
19
|
+
}
|
|
20
|
+
isClosing() {
|
|
21
|
+
// Test access to state
|
|
22
|
+
// tslint:disable-next-line:no-dict-access-on-struct-type
|
|
23
|
+
return Boolean(!this.element.open && this.element['closing']);
|
|
24
|
+
}
|
|
25
|
+
async transitionComplete() {
|
|
26
|
+
await this.element.updateComplete;
|
|
27
|
+
let resolve = () => { };
|
|
28
|
+
const doneTransitioning = new Promise(resolver => {
|
|
29
|
+
resolve = () => {
|
|
30
|
+
resolver();
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
if (this.isOpening()) {
|
|
34
|
+
this.element.addEventListener('opened', resolve, { once: true });
|
|
35
|
+
}
|
|
36
|
+
else if (this.isClosing()) {
|
|
37
|
+
this.element.addEventListener('closed', resolve, { once: true });
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
resolve();
|
|
41
|
+
}
|
|
42
|
+
await doneTransitioning;
|
|
43
|
+
}
|
|
44
|
+
async isDialogVisible() {
|
|
45
|
+
await this.transitionComplete();
|
|
46
|
+
const dialogElement = await this.getInteractiveElement();
|
|
47
|
+
const { display } = getComputedStyle(dialogElement);
|
|
48
|
+
return display !== 'none';
|
|
49
|
+
}
|
|
50
|
+
async isScrimVisible() {
|
|
51
|
+
await this.transitionComplete();
|
|
52
|
+
const dialogElement = await this.getInteractiveElement();
|
|
53
|
+
const { backgroundColor, display } = getComputedStyle(dialogElement, '::before');
|
|
54
|
+
const hiddenBg = `rgba(0, 0, 0, 0)`;
|
|
55
|
+
return backgroundColor !== hiddenBg && display !== 'none';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness.js","sourceRoot":"","sources":["harness.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC;AAK9C;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,OAAe;IACvC,KAAK,CAAC,qBAAqB;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CACjC,CAAC;IACxB,CAAC;IAED,SAAS;QACP,uBAAuB;QACvB,yDAAyD;QACzD,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,SAAS;QACP,uBAAuB;QACvB,yDAAyD;QACzD,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC,IAAI,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACvB,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAO,QAAQ,CAAC,EAAE;YACrD,OAAO,GAAG,GAAG,EAAE;gBACb,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;SAChE;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YAC3B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;SAChE;aAAM;YACL,OAAO,EAAE,CAAC;SACX;QACD,MAAM,iBAAiB,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACzD,MAAM,EAAC,OAAO,EAAC,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAClD,OAAO,OAAO,KAAK,MAAM,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACzD,MAAM,EAAC,eAAe,EAAE,OAAO,EAAC,GAC5B,gBAAgB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC;QACpC,OAAO,eAAe,KAAK,QAAQ,IAAI,OAAO,KAAK,MAAM,CAAC;IAC5D,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {Harness} from '../testing/harness.js';\n\nimport {Dialog} from './lib/dialog.js';\n\n\n/**\n * Test harness for dialog.\n */\nexport class DialogHarness extends Harness<Dialog> {\n override async getInteractiveElement() {\n await this.element.updateComplete;\n return this.element.renderRoot.querySelector('.dialog') as\n HTMLDialogElement;\n }\n\n isOpening() {\n // Test access to state\n // tslint:disable-next-line:no-dict-access-on-struct-type\n return Boolean(this.element.open && this.element['opening']);\n }\n\n isClosing() {\n // Test access to state\n // tslint:disable-next-line:no-dict-access-on-struct-type\n return Boolean(!this.element.open && this.element['closing']);\n }\n\n async transitionComplete() {\n await this.element.updateComplete;\n let resolve = () => {};\n const doneTransitioning = new Promise<void>(resolver => {\n resolve = () => {\n resolver();\n };\n });\n if (this.isOpening()) {\n this.element.addEventListener('opened', resolve, {once: true});\n } else if (this.isClosing()) {\n this.element.addEventListener('closed', resolve, {once: true});\n } else {\n resolve();\n }\n await doneTransitioning;\n }\n\n async isDialogVisible() {\n await this.transitionComplete();\n const dialogElement = await this.getInteractiveElement();\n const {display} = getComputedStyle(dialogElement);\n return display !== 'none';\n }\n\n async isScrimVisible() {\n await this.transitionComplete();\n const dialogElement = await this.getInteractiveElement();\n const {backgroundColor, display} =\n getComputedStyle(dialogElement, '::before');\n const hiddenBg = `rgba(0, 0, 0, 0)`;\n return backgroundColor !== hiddenBg && display !== 'none';\n }\n}\n"]}
|