@angular/material
Version:
Angular Material
51 lines • 8.13 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { animate, state, style, transition, trigger, } from '@angular/animations';
/** Time and timing curve for expansion panel animations. */
// Note: Keep this in sync with the Sass variable for the panel header animation.
export const EXPANSION_PANEL_ANIMATION_TIMING = '225ms cubic-bezier(0.4,0.0,0.2,1)';
/**
* Animations used by the Material expansion panel.
*
* A bug in angular animation's `state` when ViewContainers are moved using ViewContainerRef.move()
* causes the animation state of moved components to become `void` upon exit, and not update again
* upon reentry into the DOM. This can lead a to situation for the expansion panel where the state
* of the panel is `expanded` or `collapsed` but the animation state is `void`.
*
* To correctly handle animating to the next state, we animate between `void` and `collapsed` which
* are defined to have the same styles. Since angular animates from the current styles to the
* destination state's style definition, in situations where we are moving from `void`'s styles to
* `collapsed` this acts a noop since no style values change.
*
* In the case where angular's animation state is out of sync with the expansion panel's state, the
* expansion panel being `expanded` and angular animations being `void`, the animation from the
* `expanded`'s effective styles (though in a `void` animation state) to the collapsed state will
* occur as expected.
*
* Angular Bug: https://github.com/angular/angular/issues/18847
*
* @docs-private
*/
export const matExpansionAnimations = {
/** Animation that rotates the indicator arrow. */
indicatorRotate: trigger('indicatorRotate', [
state('collapsed, void', style({ transform: 'rotate(0deg)' })),
state('expanded', style({ transform: 'rotate(180deg)' })),
transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),
]),
/** Animation that expands and collapses the panel content. */
bodyExpansion: trigger('bodyExpansion', [
state('collapsed, void', style({ height: '0px', visibility: 'hidden' })),
// Clear the `visibility` while open, otherwise the content will be visible when placed in
// a parent that's `visibility: hidden`, because `visibility` doesn't apply to descendants
// that have a `visibility` of their own (see #27436).
state('expanded', style({ height: '*', visibility: '' })),
transition('expanded <=> collapsed, void => collapsed', animate(EXPANSION_PANEL_ANIMATION_TIMING)),
]),
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5zaW9uLWFuaW1hdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvZXhwYW5zaW9uL2V4cGFuc2lvbi1hbmltYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFDTCxPQUFPLEVBRVAsS0FBSyxFQUNMLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsNERBQTREO0FBQzVELGlGQUFpRjtBQUNqRixNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxtQ0FBbUMsQ0FBQztBQUVwRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBRy9CO0lBQ0Ysa0RBQWtEO0lBQ2xELGVBQWUsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEVBQUU7UUFDMUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxFQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDLENBQUMsQ0FBQztRQUN2RCxVQUFVLENBQ1IsMkNBQTJDLEVBQzNDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUMxQztLQUNGLENBQUM7SUFDRiw4REFBOEQ7SUFDOUQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxlQUFlLEVBQUU7UUFDdEMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUM7UUFDdEUsMEZBQTBGO1FBQzFGLDBGQUEwRjtRQUMxRixzREFBc0Q7UUFDdEQsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQ3ZELFVBQVUsQ0FDUiwyQ0FBMkMsRUFDM0MsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQzFDO0tBQ0YsQ0FBQztDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7XG4gIGFuaW1hdGUsXG4gIEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSxcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuLyoqIFRpbWUgYW5kIHRpbWluZyBjdXJ2ZSBmb3IgZXhwYW5zaW9uIHBhbmVsIGFuaW1hdGlvbnMuICovXG4vLyBOb3RlOiBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRoZSBTYXNzIHZhcmlhYmxlIGZvciB0aGUgcGFuZWwgaGVhZGVyIGFuaW1hdGlvbi5cbmV4cG9ydCBjb25zdCBFWFBBTlNJT05fUEFORUxfQU5JTUFUSU9OX1RJTUlORyA9ICcyMjVtcyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSknO1xuXG4vKipcbiAqIEFuaW1hdGlvbnMgdXNlZCBieSB0aGUgTWF0ZXJpYWwgZXhwYW5zaW9uIHBhbmVsLlxuICpcbiAqIEEgYnVnIGluIGFuZ3VsYXIgYW5pbWF0aW9uJ3MgYHN0YXRlYCB3aGVuIFZpZXdDb250YWluZXJzIGFyZSBtb3ZlZCB1c2luZyBWaWV3Q29udGFpbmVyUmVmLm1vdmUoKVxuICogY2F1c2VzIHRoZSBhbmltYXRpb24gc3RhdGUgb2YgbW92ZWQgY29tcG9uZW50cyB0byBiZWNvbWUgYHZvaWRgIHVwb24gZXhpdCwgYW5kIG5vdCB1cGRhdGUgYWdhaW5cbiAqIHVwb24gcmVlbnRyeSBpbnRvIHRoZSBET00uIFRoaXMgY2FuIGxlYWQgYSB0byBzaXR1YXRpb24gZm9yIHRoZSBleHBhbnNpb24gcGFuZWwgd2hlcmUgdGhlIHN0YXRlXG4gKiBvZiB0aGUgcGFuZWwgaXMgYGV4cGFuZGVkYCBvciBgY29sbGFwc2VkYCBidXQgdGhlIGFuaW1hdGlvbiBzdGF0ZSBpcyBgdm9pZGAuXG4gKlxuICogVG8gY29ycmVjdGx5IGhhbmRsZSBhbmltYXRpbmcgdG8gdGhlIG5leHQgc3RhdGUsIHdlIGFuaW1hdGUgYmV0d2VlbiBgdm9pZGAgYW5kIGBjb2xsYXBzZWRgIHdoaWNoXG4gKiBhcmUgZGVmaW5lZCB0byBoYXZlIHRoZSBzYW1lIHN0eWxlcy4gU2luY2UgYW5ndWxhciBhbmltYXRlcyBmcm9tIHRoZSBjdXJyZW50IHN0eWxlcyB0byB0aGVcbiAqIGRlc3RpbmF0aW9uIHN0YXRlJ3Mgc3R5bGUgZGVmaW5pdGlvbiwgaW4gc2l0dWF0aW9ucyB3aGVyZSB3ZSBhcmUgbW92aW5nIGZyb20gYHZvaWRgJ3Mgc3R5bGVzIHRvXG4gKiBgY29sbGFwc2VkYCB0aGlzIGFjdHMgYSBub29wIHNpbmNlIG5vIHN0eWxlIHZhbHVlcyBjaGFuZ2UuXG4gKlxuICogSW4gdGhlIGNhc2Ugd2hlcmUgYW5ndWxhcidzIGFuaW1hdGlvbiBzdGF0ZSBpcyBvdXQgb2Ygc3luYyB3aXRoIHRoZSBleHBhbnNpb24gcGFuZWwncyBzdGF0ZSwgdGhlXG4gKiBleHBhbnNpb24gcGFuZWwgYmVpbmcgYGV4cGFuZGVkYCBhbmQgYW5ndWxhciBhbmltYXRpb25zIGJlaW5nIGB2b2lkYCwgdGhlIGFuaW1hdGlvbiBmcm9tIHRoZVxuICogYGV4cGFuZGVkYCdzIGVmZmVjdGl2ZSBzdHlsZXMgKHRob3VnaCBpbiBhIGB2b2lkYCBhbmltYXRpb24gc3RhdGUpIHRvIHRoZSBjb2xsYXBzZWQgc3RhdGUgd2lsbFxuICogb2NjdXIgYXMgZXhwZWN0ZWQuXG4gKlxuICogQW5ndWxhciBCdWc6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE4ODQ3XG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgbWF0RXhwYW5zaW9uQW5pbWF0aW9uczoge1xuICByZWFkb25seSBpbmRpY2F0b3JSb3RhdGU6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YTtcbiAgcmVhZG9ubHkgYm9keUV4cGFuc2lvbjogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhO1xufSA9IHtcbiAgLyoqIEFuaW1hdGlvbiB0aGF0IHJvdGF0ZXMgdGhlIGluZGljYXRvciBhcnJvdy4gKi9cbiAgaW5kaWNhdG9yUm90YXRlOiB0cmlnZ2VyKCdpbmRpY2F0b3JSb3RhdGUnLCBbXG4gICAgc3RhdGUoJ2NvbGxhcHNlZCwgdm9pZCcsIHN0eWxlKHt0cmFuc2Zvcm06ICdyb3RhdGUoMGRlZyknfSkpLFxuICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHt0cmFuc2Zvcm06ICdyb3RhdGUoMTgwZGVnKSd9KSksXG4gICAgdHJhbnNpdGlvbihcbiAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkLCB2b2lkID0+IGNvbGxhcHNlZCcsXG4gICAgICBhbmltYXRlKEVYUEFOU0lPTl9QQU5FTF9BTklNQVRJT05fVElNSU5HKSxcbiAgICApLFxuICBdKSxcbiAgLyoqIEFuaW1hdGlvbiB0aGF0IGV4cGFuZHMgYW5kIGNvbGxhcHNlcyB0aGUgcGFuZWwgY29udGVudC4gKi9cbiAgYm9keUV4cGFuc2lvbjogdHJpZ2dlcignYm9keUV4cGFuc2lvbicsIFtcbiAgICBzdGF0ZSgnY29sbGFwc2VkLCB2b2lkJywgc3R5bGUoe2hlaWdodDogJzBweCcsIHZpc2liaWxpdHk6ICdoaWRkZW4nfSkpLFxuICAgIC8vIENsZWFyIHRoZSBgdmlzaWJpbGl0eWAgd2hpbGUgb3Blbiwgb3RoZXJ3aXNlIHRoZSBjb250ZW50IHdpbGwgYmUgdmlzaWJsZSB3aGVuIHBsYWNlZCBpblxuICAgIC8vIGEgcGFyZW50IHRoYXQncyBgdmlzaWJpbGl0eTogaGlkZGVuYCwgYmVjYXVzZSBgdmlzaWJpbGl0eWAgZG9lc24ndCBhcHBseSB0byBkZXNjZW5kYW50c1xuICAgIC8vIHRoYXQgaGF2ZSBhIGB2aXNpYmlsaXR5YCBvZiB0aGVpciBvd24gKHNlZSAjMjc0MzYpLlxuICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHtoZWlnaHQ6ICcqJywgdmlzaWJpbGl0eTogJyd9KSksXG4gICAgdHJhbnNpdGlvbihcbiAgICAgICdleHBhbmRlZCA8PT4gY29sbGFwc2VkLCB2b2lkID0+IGNvbGxhcHNlZCcsXG4gICAgICBhbmltYXRlKEVYUEFOU0lPTl9QQU5FTF9BTklNQVRJT05fVElNSU5HKSxcbiAgICApLFxuICBdKSxcbn07XG4iXX0=