Animations transitions and triggers

From Get docs
Angular/docs/8/guide/transition-and-triggers


Animations transitions and triggers

You learned the basics of Angular animations in the introduction page.

In this guide, we go into greater depth on special transition states such as * (wildcard) and void, and show how these special states are used for elements entering and leaving a view. The chapter also explores multiple animation triggers, animation callbacks and sequence-based animation using keyframes.

Predefined states and wildcard matching

In Angular, transition states can be defined explicitly through the state() function, or using the predefined * (wildcard) and void states.

Wildcard state

An asterisk * or wildcard matches any animation state. This is useful for defining transitions that apply regardless of the HTML element's start or end state.

For example, a transition of open => * applies when the element's state changes from open to anything else.

[[../File:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAADlCAMAAACS9fUyAAA59GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wMS0xNlQxNjoxNDozOC0wODowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTAxLTE2VDE2OjE4OjUyLTA4OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0xNlQxNjoxODo1Mi0wODowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDphZmRiYjM0MC04YjQ5LTQ3ZWUtYjJjZi0zMWQ0YThhNjkwNWE8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2NWIzMjA2My0zYmFhLTExN2ItYWFkNy1hM2RjOTQ0ZGM3Yjc8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDplYTNiMDZkZC01MGUyLTRkNzItOTFjYS1iYmU4NTQ0NjA2NTQ8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZWEzYjA2ZGQtNTBlMi00ZDcyLTkxY2EtYmJlODU0NDYwNjU0PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTE2VDE2OjE0OjM4LTA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6YWZkYmIzNDAtOGI0OS00N2VlLWIyY2YtMzFkNGE4YTY5MDVhPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTE2VDE2OjE4OjUyLTA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjIyOTwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+2CgOrQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAwBQTFRF////8/Pz//+e2NjYkPoD4fyhrLnQ4vyh//////8Dbn2XAQIB/f/1+f+e8v+e9f+f7v+f4vyi///6//8A//+a5v6h4P2b5Pym4f2d6/+f5P2h/P+fw7+3x9Pnkv8A5/+f+Pr/4PyhkfwC3/2Y5vyu3v2S8/7ZAmvA//r/2N7/9vYAfvEA6d//k6WMeaSMaahcmapc6v6hxcK7labEAXS8m/8B1dvlws7i5P+f+/3+AWLCAVnEEnPA//+jCH65oP8D+P6kgNalHX2+YZO+mKu2YMGqJW7DFggC9/f6w/mfHZSzt/OgV4i/PqivgvkAFWbEBQcWcMuoLZ+xFxYX6OntpbXZ1t+tbm1sOpO44uHgRoLAyu6k2d4ALBMFUresvMYKLIq6y8rKkN6knuSkFIq2DSYAcqN97/qly9Gx/fL/0Mr/YrE5rMK0MT9Tquyiub+4baa3//7q3+WsvM6xcJi+HyAjjKO5f527z+79M37AS5e5ksWui4mIoqKizvahn7e2NzY37vKp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|thumb|none|500x229px]]

Here's another code sample using the wildcard state together with our previous example using the open and closed states. Instead of defining each state-to-state transition pair, we're now saying that any transition to closed takes 1 second, and any transition to open takes 0.5 seconds.

This allows us to add new states without having to include separate transitions for each one.

animations: [
  trigger('openClose', [
    // ...
    state('open', style({
      height: '200px',
      opacity: 1,
      backgroundColor: 'yellow'
    })),
    state('closed', style({
      height: '100px',
      opacity: 0.5,
      backgroundColor: 'green'
    })),
    transition('* => closed', [
      animate('1s')
    ]),
    transition('* => open', [
      animate('0.5s')
    ]),
  ]),
],

Use a double arrow syntax to specify state-to-state transitions in both directions.

transition('open <=> closed', [
  animate('0.5s')
]),

Using wildcard state with multiple transition states

In our two-state button example, the wildcard isn't that useful because there are only two possible states, open and closed. Wildcard states are better when an element in one particular state has multiple potential states that it can change to. If our button can change from open to either closed or something like inProgress, using a wildcard state could reduce the amount of coding needed.

[[../File:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGqCAMAAADgCsphAAADMmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOC0wNi0yN1QwNzozMToxMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE4LTA2LTI3VDA3OjMxOjEwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5QaG90b3MgMS4wLjE8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD4yMDE4LTA2LTI3VDA3OjMxOjEwPC9waG90b3Nob3A6RGF0ZUNyZWF0ZWQ+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CtJ9po0AAAAJcEhZcwAACxMAAAsTAQCanBgAAAJGUExURf/////+/wAABfz8/f/ABf39/QAAAP//BZD7Bf/+//j4+Pn6/4/5B/6/BdHR0f//FpX/Aufn5+rq6v/FAPT09PX19f//AP/AEP7+BvLy8uOsAeTk5Ly8vP6/Btra2s7OztTU1P7+BY/5BXt7fOTnAKqqqu7u7pP/BFpaWvDw8GRkZMLCwv39/6Gnx6KyzXXdAImbrMXFxfv7+7m5uaKtzsnOLsmZLpX/Fm3QIqOjo4uZpG1tbY/5D6CgoMvLy//DF/7+EIuSpZWVlb+/v+Li4piYmGhoaPf398jIyICAgHR0dN7e3pubm////vn5+f/GBbCwsN7h79fX119fX6enp4aGhv/EBY33AJH7Fa2trUtLS0ZGRtzc3IODgzc3N0FBQbW1tVVVVezs7ODg4HBwcLe3t5KSkk9PTzs7O33aBfq8AikpKfy+AY+Pjy8vL46Ojv7ABfL0AR0dHYmJiXh4eA4PC86bBe3v+eXm9LOzsyMjI83T6eHo9I6AcIyMjFJSUv/CBIeWjmWYio2Eiv/BF3Z2dliZcBUVFdiiBZymb8SUBPO3BTMzM//JBeyyBWKsBbmLBVuhBdDQBayBBYjtBaurBXhZBYPkBfn5BGu7BSYoHpx1BcfHBU0+BXXNBCAfBV5IBR43Bd7eBTYsBTBWBdfXBPHxBUF0BVpYBYhlBVCOBYvzBFuYcO7uBcHBBI+PBXJyBZycBX5+Bbi4Ba64z4eHBYiQopCdtnGDiDGAaImWsV6ecUuDhICNqo2apaGrcJumb4ePPIOCo7YAACAASURBVHja7J3RT+JaHsdJCb9Qd0MokQcCEQKBiszNLszDLnHxARWRehsXNY4O6gA62hicZEaziw/eZJNZX0wICQnhhRsSExN93WSzu/eP23NadHDunUER6mn9faNSKYVyfh++v985PbQWCwqFQqFQKBQKhUKhUCgUCoVCoVAoFAqFQqFQKBQKhUKhUEYRfysb/YPtgXoKSzYi/rdA4lXQ6EpsJtSj3Ikgde++sYggFQoFqSAJrmgPTjakC/Uwqu6I4qMuYc5RTS/uZqYmd07hTof7U5nPa+k9SYgkutsgW6jvG5W6ZLUK8eVU7oJAdH5RDL1PvotnZ/yOgCr/TDa+l/q0O3lE1mbmw1mPrbs1NiHq20Yl5GfXitsAR8fz4VmHa2FMtv3mBlZZjviXl7Z24GQlHBC058B2RN2DSjUba9S7V8kAbO7OxyVv9FdlfK++rPMI/g+TANOpwgImRVQvMyoKC45qjmS+TDgm2Xrrcv4bowvdsYcuR95Y6gB2VgNWuhnmRJRmPVHpdW4bNs/2BI9851APxeMWLnc5VYTNpYkxlS1s2hddq1MGPLHKBWyHYgV3F7VBDEezPbkQ3oSfNlxYyr/ouor+nYuR/JfbyKtG9bQxda1HaZtIfYQ1RwIr+ZdLVcIbzsDpYtxl6zrVkDoBnvgu7Ku2hRnxBaZAYY9QteSPWoZbbmtPLqXOIV1GtF6cWZWyxwAfHO6eXuGQwXXP7sNW3oZovRSqSJgTgTOA45mIZXSOQp9W9k9DZkZGtF6IWUV8kzD1uqQ5Cz/S1+Lza7AZtyJaZi+tLBarlAaoFBKW2xGsUWM89x4mswlEy9xuJcczUPSV9KupVbQ+weQMupaJ3crjewtrgYS+Y5f0paQ1mHLQZYyDyUTNIrJxCkvebqh1fXHyW1iEYwlNy4RuJSzBSfi5hizpSwamYN6FaJkMq1IS3r6LPt+UFlrfWWMHsOzWDAxlipI9EoYj35j+OfDrhOiuwnb8mXcDNbRwjlcBqp7nT0IUcVcaPpfRtMyQBW2zh7ARZaO2oWhNTEFy3Gho8UN+MK/XvowujvkpSJUGxYr/1vvgB92WjtDOwmGffDj8133itqivsmDpPeyWmeqJqSXfe1gUMB8aNwvKVdiZYa5WVvNhEd5ZsYg3qF1JRQgz2bun8x42ICOhaRnSrpIQEhgdj6SmVZ6G8AKaluHsKr8PswyPGKndVdicQNMykl3ZLGOrkHOxHTSyb0IINmQ0LQOlwbkixHjWj8rRfOiDIg6XGicNxmDaEL15alo52LCyf2AaB0hJsMaWIJUYTqxGPVBJTIuvwq7r60fiACmDadBbBL9xsgvZz7lJiGE6ZN6xHZBxGakepj2NFJx5sIZn++PvgyXZYJ9+sreO8wMceGA5QrYUvDNegIhXRRahimQxy1VijVYrhkspP9KBhypsRTEdsslVdAryBo0NIauwfYjpkMnQuIsXgmE/82S/PVuwh2Sxx9VC5sBl5LCo6fBsAcliLCpy5txl7KCQnQ+c7M9hocVUTKw58Br9w06IKk3R0V0UO+MMISizwxXfPY0Nf/fX0vNz75fvuaUnmpTT8Nry2G2RgJH51RYUTFGckPeQJX3DHzGobATjE0ywxNWrwfW7VwNsjgyMJu/waQiwMyzKW/727z/qqv+WcErCSOqZNDgYalne8vdf/qCr/vNXBGsUcVyGLEsNS8D6h/1POkr8H4I1igLLD7NMDf1QsG7e/F43vVn/J4I1Aq68sMTWcWcK1vqboF0nBRGskXDl3s/IbDUrgmWKwv0MWDuQg2CZo3DPszYwimCZIBE64B1zbYpgGZ+rElQsCBaCNewAuldWZPaaFMEyfOFeAYHJcxQhWMZOhDHwszijAcEyuGG5IMxkeyJYBk+Eof0xw4MVDAaf+igEa8iJMM7eCNbDwSKkUFqComjvT1bQLopBBEsnrlyQZLQ1+4MVpECJTsKV0rrpS1bQftNSvk0WgjXcRPjpwG1UsIgDNVvX9XZDFOvcd5C5fbiocHUES7dEGGB1jns/sMiaGsd1OlxHEWsqWMHgbRV1u9B7zzqCpR9XUUgze46GvmCJLe6q3Wi0L2tOFSxaQ4n0hqxyOkXN05xaXUXXOREs3VTZ9jDbln3ACtobnU7TabeLNzeaY4nriqI0RTVFKu0m5cuutJWGSJcaitJAsPQyLD842P2yVz+wiGERTtRUp4Jlb15xRDXCVZvjfubaor1xTW5/bhPmlEtyVx3B0idw0dP3DH8PvR9YWv7TOod08eaSayntK67lbHBXzUaN8HTNtRoEqaazQdfVOQRLn8ClziMMt+SDwbKrYDlbXM0pOhudS7HJ1Z10IILeOkllVXO26TryKARLj0QowCzL33p+LFjXXFNcD9qvThrrV1xdIRmxxV3XarU6dyXWSWLEXqFecfuwL7PckI9MhQSsBh1yuCb3Nq857rpBcOpcUrXEa7W4R7B0MawJmGH6NA0PKN6v1eJdFO85VqdB1jbrZCVJjuuNm0YjqDrWDYKlS9QsuQzPdDv2BavRIT5EpKgDpMTA1Brr5yuyUnQ6r07silpjOYlXYY2ln2E5WD34/ECwVMviagrp7NWddQIW4azVVK64tlO5Vppt7spOaq1Ws0n+czZPTtpN7BXqEbTE5Bbz+9jvkI7YuqQjV6SaqpE0aKdjVVynRXqDHbJw2SQL6shWpymK7Q5d1UGwRm5YcZZOsDYQWJSsG6XVVksqhc6duWmT/+jIO124IQtiUGm1lHU1b7ZaDVFp2BGs0cbMvTPPeiM+ZNoMPTqoHo7uHhmk87LoFqI2QUs7eng7F4se4sH5WCM2rCq4jA9Wd/ZC0G7/ai7D/YW7JfvzzyA192XleEsUVnXlapBLtD33nHe8rNwAYQ6fRC3sXzMSv0xhNK7GPy6z34SmBMvUqdBm8el9ahlMhS/CsMb20wZ425gKDdcl9IOEYCFYw89KuyELgoVgDd2wCixPSEawjKvKiiEuaoJgGSwTChA3RPtpp+P+i25CsJ4YruTRuGHAsjt1FF5A4EnRip5vWIySCn9p/1lHtfGSJ0+J1muIGKP5eMv4v37QV1EEa3CtzBvnU/AKrzdomLGGCdZnJKOMmQlXN4f4nS++V7a7peHucs9xt+6Fd3tW9Lwzvmf5drPHb4sajKuFi9VhGBbBiOg7zkiEwXpJYDlg7mlTLe55klWWx+QFlyAUAnlHPBvPBsoeWZatvY/FVn8RYH3IJAYHi/9iUiUp4Pelp98efvx4Dvd0erQzVfH5896xrnkhWy+AqwjsDZYJ75jyuGaSZ6GVjwBHk9NryawkSeVyec475xWIvOVyYHbjbLpI1m+GUv6Sp7s1wmXuPmF2kO9Q8LdcePzVsyOAg+mlvZhf8nxvm0g++7qyQ+hbW/a7taoLncvEOg493qpUHqLlmfTKKbxdS+Y9brmn4rL9Sl/qKnc0kPy0D0c5nzSuZUWMgDkzofDIi5tojMjC8tYFHE4uOST3XWLsY0D8XadxQYqFtmGnMhvle8wPZapMWD1/+EGLLgOJ/HIRoFJ1uPnH9vS00S26JAc2cgCLcZe2GyiTGZY8VXkoVxoQ0UB6HzbTgWiXzEHsputRtlIsBJCLue6eHGUaw3JB9kFgaT4Tna1w8NNyXtboeELtzXf7lK74FvGt7AKWWyZzrDg85OTbKlVuP/GXz8tCopvSnv7qWlHmiX2Go1UJbctUYG3lrP3AUhMXLyQP4HPW1ZPJhrMHKkvejbcw7Yvi6JZpuHLv+PpUzmrkF7LHcLE6p40PDDn0WpKV/R8AkgJmRJOUWAGY+C5Y/2fvbH4TSa4A/uRWP6uI1CMQPVoEgkYsiI+TmxNBRpH5thlE+DhgjLHBYCTLM9phrBWOgpWDNYrk00ojzSG5JEq0l90kipTkko8/La8asPHXDtBgz9jdsk0bu4vqV79+79WrqlcaRfbIBXpiMixNoQyLbRa6WHGKAEbY9MvXWNX9n5ofwnWJvLaJ3aodltzeQy8uk8LgmsnQWl88V6q/cz9XHCRbexezMdM4Lrrc6nBlVaxgw5E20PrCwWqich9YHCRf4QjXzQ/XXdM+xp4jtGTDIH7RLpYDm3e7WBpWZcSy72HdaQ0tcw67HK3Ffq7B6c0mXppEGAzuztigudIRPCkEHsQG3r5fjlY8r2uox1B4n37O2HUxLUpkDHyn/TvajmsNatnX7cAjNc8IrbPY/DZ4OIh5XWwGTNcEJLbMV0IZY7YgS9hC562yeFNaktgNWx/Rg+ZA2Ct4vjMn2nTNlhmuraWw5ZpXvzODK2epu5u1gcVCAhaHj2CAT8zj7S/qLTx0cWt5DpVpLWAj/tgdM36jxRR2LPPcJoOt1O5uNgBNy2hAk+9rtgV8eFLUZPfMDSWD9L7HXvRaoBIcP2YC9KOLKr+SEq+DxTv8a7vY/xz6+xyCTA298swUMDCVDhLFqhk6+5eLvcxvx7sjMENpiWDHNS4Eaf+sKkGiUKn6oLjp70sAysaGU2/5/usJuHkDOlO4Yfk8wkhaeLaPNWnW6vAwSpifKKWaV3HR9SxWbGKL7m6jo9CzGet5Lc9cYwme94oKrH3a2HSIUU+hFoRQo3behjZ6c/cHoaYU/8pktjXNZz/GzZ3Pp0fFq9Qc4KA5mz1koGZRok5l+GL3IFRFK1jR4SNTGMJIBOMQxnZl73mrLAbmTYwWAQZk/lSZPFq0QP8dgA8zAMmUoEM8fBnFxN45XD1UsRH7vKwER0vqokOYCXZ6ZrIYJN2ULOXJuYrRnVp9dLMXDgBvSch6DP9dBFHy07NWiQp8fKUePW1B4ZxUC77zZBs1ky6w9s4ufXfegNy5kpdgBfWVR9WRyxjdmklpkYOuBLEIGyUTwHkPehWSmNm8Es3WG+9tRdyU4LlrLDrkixz0oio09zclBz13hXccrJAUc23psoQsWxlLl4cYsphszoHVVLkZdNlWqlzrAKvq9HUbRrHONkhjUTckc7RTW+NgJbCgxFw7AiRyWH3WYDEI2AHyR2UYpEAbf2lxsMgsWtClu2zb6ch3580ewlpxHqym+g+dbUj1E8KYMk+rtBhYSWxsOwIbfrrCd3hwKIP5fYJpPSEQyftqN565IdzCbPKsa4E4VuIJrHi7ZBYzmHVAGZPe1J4usJqj8Ch32j0YkefQKyIowYNsZTNY1pYTDteAaZMBtRnt9FMAqZYAq1UEORofJg5ho8WHbCallQiiY0ryGVjee5KHr+30LFbCjGRV5jp+B/r4photQL1X6OaeuZMlSOu9PnWN8+GBC4ob6654ANRQxUVd5s5x36xDOoxgDYwirQ48dM4Vb6XORTvkOYmHY7cjROOJXon1JpQ7ACbvOAvXHIaRLlG9mLVMea2oRHoF0nCqY+Bi4CKmwLrnA8GVO+63oLg+CJuM6PtlS7BJB0K3X8zA2c8Ph+XOsZye0w3iF4WD3BFMyMUWpIsSuTBiy2R22bmxVZQm/UVobgYVC9ht9KA4JSf/yEBA2pktBRUx6WxwB0CcumZjsZX3TZMW2QiQjjpFQ9vBhw2HM861cybq7b+NLs6H0b81//AQE6DgBxWKu+fYC3i6fjI76e1sqUsMWFLbjQ7EMOHFbs0LpTYEPG/9eJyGjdpBA/sz7ntF3cMcRvJTVXU0+sXHwcBWK8BwEGcktJFMn726uk9R6ZXNcLgxjNW8nl4bg76fiiliVs77XLwXIOe3a2Z4l4ICpsFMhqgFxx4BIBqG9fcWcGIcchiDwtGseQR5SASjvulqe/U/+Zbp5tsGVjdSLy7+AF9L04Nz53S8BKvImyuRcKBNvfACeF/nnZgj9zBGYHU8BEUqDvs87Xe2B50NgB20z9rAVLutw1PFAOMLOF7Rl648xBNggbVy4gme2NRdAqvctYKUwuoILJURWMLrPcjD4Bw6OaArZt9vjJRsukc2dDbLbcz5u+v42cMewhxglcZghdBCJ1a1y8Fq8GRZ9I7CTeE5nUcdUCKgoBSBN/TqpPdnb3Eiag8HspFGRK9/9ct///wBj//845/yjK3NoHCmgaVwq6dYDsgUvo0ARE7yoT25gDaJNFMZlQQE29DHeCDHR6iS82msUe8QSxbD/dYJ1q9+/fVDHn/617czgxWq049EivRP3vvWX/bYRE8cwOERlcPuvguKUQs0PViAQQbUfu0iRQRGqgCtlGUuX4kMm/nwbcIwcDrB+u/LFw94fPzNtzO3tspTxbC0NmfQJoOJ/CAyqKqJgSlAfxLS9H4+IECaZxORA7wvmM/T+/LcIRgIvEPJcOH1gfW/ly++eqjjFy++mQOs6335O7fmHp+xxey4LYKaw7iRr00XWL99+WL1oY6v5gJrYlyADTd6YJffV0Sx8cYQY8D0mDIiqsoHAA2ynjJYjxQ1jmPOIMsAawlkuXDADLIMsBYct2R81sLA0FkGWDdvTe/CSMZ3AeqpBlnPHqwb27bBWlFXD/EVkeVEj2CQ9UTBujkpdPjCxNtzRMXJJe8xpR7J7OjcdoxPqjD8rKcJFrvmL7GrWfSTMQgeZBAmZ5AxUErb2wdmneqR66yOESl9imAxyEtrrjRAwhzgryJYMjy3sm9LzsSuZfoupiS4dKsYmHuIOZteJkTy4CMGWU8PLAZy9ih6cmCDTi0axGwairvB0qmT2nuzhAfaAg1XxOv1rreE8lHKJVxet7deyb2RdCc24VP32wZYSwTL/UhgFdAMTaxqk0KdqMA2KZBkFBRqbp4liYyf412lXjlXSItVG3XpqvScYwHeEZG1hxnDzVoSWG63W/t+BB8ryBdS9UqQ5Ild/HsJzIXWBl2QagDqbmxi025G2spcm9gcMW1agIReUWkR4tkgaxlguSe+HxysAgiQ9NMXcRKsOrEeyeXiIG0DmDhYpLHqg8GbbBFA3jtLScKE188WIyPYQPu9ZN0fhmUGWJ/k6uN3H/7y4Xc/6CVrHlN4zieHBnuQ7JpAPon5Rku0NbC6GlixiLdMPpbavjjkeUXZp5t8ViHlg/vTzk/8ZO7J0ZD6aKuEp7o1+lRguVe//uvKyvd/XPn9d6vcInKj6B5bSO3M7Xa7p7GU84AVQ685glvkY1W2BmTojk8Vc7gArgsC6yQzYQqd+6H8chJv8T3Mju/TQIJ6n5ZS2a3w2hh2NqlS2TMFy736zfcrf//h459/XFn5A9dZ7tVrltF9qcfcywALMqUGT7SUPFxvpJxEU6S2HZXAWQfI17WVO8OtfMGkLi2fG58ZfXfCKwbt8iUtHHJzRhjpoUBduQp+XN1OIKG9JPgOnQxMLim/yJlkuk0yW0x594Hlvnb+YeWDdvbjyt9WV//P3rn8JNJlAfykSF1SLJhQgS9DJGAHITySSdD5FoRgvvCQZ1cIjwWozavUTjptR9EFvdCV6Y0rkk5c2OnEDsaN2o/pZHYzf9rcc6tAQfqz7a912qJuolRRVYDFz3POPefcc85PjFv9/rmiIfu9/hF7PHrS783ditYP+bFASmGZrmTJIM2z+2/CBFKsvAESP3IiPx7UmfxW33nvRuVMl7AF/MIN5GJZVfgo/tkysTKcsCjpgrJ0v4jzCV5QhGtoewcLt+XfNEkBYKVW2/Rhfj0/WFr9DdV498/8GGysj9wpmxNuvT87pZQdv+O4Dz1FQ+5yZydGY497+5njuON7AGuQvgfry9It2uP+7ipODTu7rQnvwEN+FQzKpzTgvMFqQaxwy0JCgPTbcDnZQPPlA3sBelGQFFMLJAG1PbvYzLCXndeUwf8dYFF+PpwdMYV39JHqwrcc9+nkYvf9OWrI3nnv/dkWBYv73O99QP7uJYMU/9dXXMIwvCM8+D8oD7b6pGYIFKxMWt7DqqrxnYOQALmGBO31TDTpbHHlaqBhSOW35XwbXMpaNJfB3KTcyR2AFCm0iQVgjdhzC7OVbBr8+RxIHqcW6PousE64zypYXxlYqBep3DIe0x+j8QvXp2BdHuFzvXsB65f4V0YzK3TT58BT3SdX95d48JDgAolDg6Ts27F0jeRar8nLMAnOR3flvMVGkurFIR+WuitTsJpRXCcJLmKPk1p5j5hhqQkOIk4RWB9HwJozHlGUPhkvuU9f3n65pKD1KGL43MX9gfV/b7srQHRCYyAeojUrOInoJ0GAcg3ib+ZdRIJFH1WFlJ5MBEx1B1V0RSUePg9pCpZ1t0oNRF9+gXgBcsSfxtW4kT0Q3+QPQ5rwxd5RFZ59mKNg4dSwz10av3Lv6Dg76zGwnqi/NZKaPOFWWZ/vwc1+CNTGomzMiKRUCjzbhziRLCQourPMxoLwEvjrDcaKoJzPJNa2h85BSnmsoUgloT2Ej9GAiV7dETRhZ32v8X7OjPc57rNxRGL1jk5Pz0+fTAVYlAkzWRwXJ2hjUfuPWEQSsrQTWBpRStSz8s4MBSuugrV2ZRDyTGKllpPo3i24UBXGiS2IYCVl+mIk4J0asNDd8IltXFJdR3e+0E20py5wl53Qnwaw6OeOvfaPfXoECyVWwkrW2CnxN4buRijoBxWsCNifYaFbc1ulK12iD/llG8ySth2rU+5kKVshsB9GIU2c+7EpAuv0jLvsn/Q/c1+Zic69nTvm3m0Zzz9wx3MnvcvzocS60DhY/t3oDbDWZSz24KRWtzu2XIYFYpohTbmetYlITZLOAfeIXDSRPBZng/L+c1LLg+VFrUPy6PXKlDZX6LWb7tqzlp1aZS5qw0+H8Y5knV9ydLx/e6R4S99z6L2iVv0ZPv3xdEokFvM/zYyn1uecAPZFKxVbBc+iF8RFKGesXvGwAZiP2J4F8Du6djAn2IU5c9FpzvEgOsKz6FGdLa/RsxwvzAuNFnjTJhBc7akBC2mZO77onWNQEG2s04vjLcWa718cz9ETjnoYn97qbWlnXeHku2VafvUNf/e1XOnVgMVu3k7DmDNXuOk8GbTFYrPDX8t1/iBgDeQQxp/ZrHAYK3zy5O9X28b7COn8YiIrhM3jbkQGhEGNcFa7NeEuRXwFflDbVYkcquEmXolrqifjhXgw7Wsp7eiUn+kByzjMXlDAmpDdMPytZbAEMARWb/v89HArId3pdef99+lk+FWD0GMHep9+PC3rQcH6iUHoayLLhenQt1w8zFb4ae+r0SD0pGRSrddu+OaXl5Vvly53zd7TXrLfD6zS+SuZ748erKvyzX+NmKvEUUGbOaR6tZk73zA+sgp36hJ20xoXvjVL1MGaWrBYe8+xlRXXpM/1XXwsppU0rHG/g8VRVHuMenPtdsKkS6ypB0sAUz088icMAsyCkoWo7gpsc31DApeoknWV49olAeI2sfTSDjl8sb2iOZGlg/UDt6xLRiOGglWVRinl0apgZcJavF6AzdCouOKhTUKGFdLAs6RszG8RJV1i6WDx4CWN6z3U0+5Spw3gCHZ9qxaQ4pVSZYUiFV46SMNiiE9uRl7N5s30mZhFWmN96zwb9Dp3hHUtzxZAi0MH60fuWbJmuupJHCThRfmFCBVScZSavP+gao74JOgcxsMRPuqG7uaqx5Ldwf5PVgtZQyTdWUpX2MdWLMqlalDUpPH+39/+9seDDW2AlSCu4cxOauap8iNdWHUD1XFY8AYWiWjBLSuUOwA+F0JlgWwM5ldY+RvZjQq1yaz6RqXzjNOkjfWf3x5yHGkBLGHoccClrA6QwF2GnSiwnWKn9Px1q0injgYqlhAsOjO0krR9d5gPc4ASy+MbZFun9t2C1siiYGV/f8hx8e9HDxYLRYuDhFARVw/CkkcFK90iYX+QtJwkgcejCBamncYy8eWhUyGGuX4VefiCHZ+kPbC8//jng45/Pf57SG8aUSskUUkjH0hQpLqxUse8ZH+IYOa66CUFSIV4DwWruUZFmpP4wlQ2OUQUUxhvxPzSlTjYLJTN7bBegEsfDKfOkmHg9CySfTe2GnhJmhFSBvFFYLW+nYMCkZcDQI13yBNfEWwyirAZrOEmgMlN3LvuFLX3oUUCO0T2axEs4enTp9irUhDwgf08fSqwB1B2lG0W1Lrav74BV+eOH7x5rSbAmiWJIQutYBf7m2fylkIRdxdCotMGwkp30QozOQApHbcBJEsS3Zz1M2epyVww011LEQwz8UJR73ivDxUs22Z4vODHQXLUD6r+Vp/w0nkjD+MHR5/Qh04WhDdScJWfgJGafBUGZcNZTQBeGHa6p2bVis9yLaSjHFTriAh6y019DMFy3sj3s/1pJHneqt81fXyPK2ujfKMTxm3X6EMft1MS3R/vZTASlx7H6M+T+SblMesgTuPgqS7M/WQhJGi1Hqk+7iKx7M8KipGVmtR6WrqbSZVK3ZgqmnSjbEpF1svIPEuuqiYnZI6Gsna4/uS1rsLX/BDqMQNUy/SFJOdCEcMSbBUipCsgTNSzilwTRtYCDUvR6SLv8YusNBHp989D7IBxphYeZS4EAzRee9mO6p1X44ow4vu6lnG6vgdgKZEa2WixKpM8D3Gfggs/0kf9SrApfdAGmarACkMIgj5H0IAuJA4msfKrYFXin9559r3aqF5bWPYq37lVUr5p1Je8d+x7tyvlbP0QXYdUKSDa/B4MXXuxRWJwCc+1qzrSxl+JOqtB4TSFCtOvvI1Xhdevk/XoweLdGQWsg8JGAFOu3L6lEEWgHAhUwXFoh2QZxD15JxM2dAuxwwQE5WbWBUK1AJDr2CHvytf3sKBf9rkns87W7rMxu9OMBA0QD1AhtucrVW2QSAY3CxBUikEkMrLb3Z33NCo1L3QDviRlyen2HRTB4GlE65WWTtZjN7IcdRsqozKppCvEIq1Xc3mSgDCJxyP2eN2epDs7kVyYCrYMWS14zaQ8G6P0RGRgavQ5iYbeJMFa31l8RaLg2TBRtWeAHFmfjZI0xEtg31gyr5EwnYCWPC7wNdGm+x9759abOJbE8VIsl2RGQgLhBwYWkBCWbZ5inpAFo4FwJ91K+wAAIABJREFUT1sMl4eQhIRLCBqU9CqktUvUS1qaifKC5uPsw0r73baOuTTpmUxvWk63GJ9SExuwSXP8S9X/+JxTJajt2gijlo5XMzn8LnqizsG/lw5lJn4wMZPcm/NLs+tgsZWrJIYyqgGanXFbGGBDeMxTnxBSl/N7P5TOYlBCDU5VUkDFKZ3UGUGlwvLZ9qFTAGiNBcYYxHNwFV8q+lyRPil+y8AqIwXQ1IRYY4Pb/r5dhRF94H8UBT3O8gJmBCOLYqKrWMp1npWzgvA9vzS7HguNzgUDizSWZOkJiLSb91jzYRRIVqVuMEEyPF6NHBJYFDRBvquDKBBV8fgSrDNiMbEQLs6CBOdbSKsW+zRLHxGXFyokdUg3wYAY9muorAYZmceaR6Ydw2gSlv7H416v0xFzqF42MQsqfWL2nqusnSerbQqrVJGes5kHc0H/TWRVQ+pcPUIvyNXq6WkExEqcZeBO0+vDKdzS8V4G1hF5rIWQuiEJX5hDGEP2xw5ZLEsXmcY6Yt4nilZtk6Fbgr5eqUwPwNMcAfSxbmlBGeZNJaAFRJG0nQ0Wtx0HK7kn23neY2xKqI/kk5di1v1by5OU82M5jYq/2wqzqVkMLLjqaHCC+1C498jtFViJrhUhEhuksZRxtV8Kpv1hinUskTeFQjYvVR4+sGTf9Nv2s3b87c7yNRmsZo6eDeMSWBokSc2JQY9kg9XjV2bnRRYLewIcdpsqFkA2F7dN8lJZvOycWeF3QdBNo3oT72ESHqpscnzneog5AwZ4fHlKqEyYx5oEIYdNfUyBLbLAzl5HkU2sYkWGcA+EQzTHnRABxrp6TZWJd/n+7PYSvdL9Ff3q2uK40m1LwhRv9cUAegnqFpzxK7PzHku+zDC8+kq4IZKUzu4HDwKkfJLRACg1EbSD6JlfgpYOoZB9eDRcY7eb/PkTo2ZBTaFgRi+IsaTWZ5O1Ao18zZ5lmooIAMoBsTsIe0m/yydsHnTIx2DO90iSTU9hYNcOC0ZTEZmE10k42xdhQPJeq/Ers/su6/DhYzbRJ1lFV3fLvXgR8vYKn76zxeZWNlJp+3O2isxtj9KIkMJkKNutw/bs1O3hHn5Z/gpgnTPxs5oxCtvb1cxRITUsDtOBdZdOlNZDhtImO+nH89YzUVeHSU931yNAnrpZrNYt2NRn/fSUr4WWxItkv14srP0u0+2nJmiW091/SxG+wXcVRfFJKkruGl/1TlY3/OctbI8OO3oNbI/07SfJk7wbCByB12pc6u9/lgPHGfgGswElUFrTUQMky1iFbQGSqLCK6Us/xpeDONzeF5duCArkmoeXiakpQGa26Wjs3/XXi8G5Oa7eGzhwBVgRNiyggGK2lUCfrXvzw/5NHyAY8rGKw/0DP5fyjoLlwySILgArtCxrXcEF7lcLbDBpwEalvMfdvYoMycnxXQQ4Wg42OOhH7mjQFlZjIsjxkSXOrmUIP1pZ1AKLOmjjOkzC4OPTwJwlaxoXXRELIVbEgginh6wMYxZu5yTe5QaWaycPRajqAy61HG7wxE3QLU16QUBVWMX0ak7D2BKs00rlYQb+U6xqnCxHwWqg4oYWZeGepcOMH7IasmcZlYTVu1IDfWDY7/tZKWJOloNgaZtspH/pr5m/ivhyeADTod8PwWM8B/JYmtxty0Y5UqorVifDuXK0xQPdjBvAqg0nd/dRAG8Xy0zJ1wCyqgYNvdtRY8Zpd1xROFjOitp22xXiXfKFZDacpPgsgIzORsMZSp4QvQxCKGRwrhzWHjPVJd3C5WpcttUwtVmJC7C9y805sJLoc0OjrgYF7VFBX0bbrPBfppoT+Vih42DZa8DcFv+5f/oK6v066rrBDD548zVMPeJ/v9xeweK3EieLm/OxsNXhXW1uryA3vBOLg8XNebAGWzUquHFzDKwQlnk3iZvzGku5q3OwuDkPlmRmOFjcXiEW5tr8TjS3VwArfSlzsLg5D9YM+UICbq8gsrLo4yKLm/NghTDEweLmPFilxxgHi5vzYHkWM66xuDkPlqXmOFjcnAdLvK1wsLg5DxbkTA4WN8dNhFTTTWA9u26CJyV1GqzyuOQqlyV95tWt97cT924S+XJm/k+wou5YAbb6uo2D36cUtzelrPUMbH9Yjp3bZ8GKoWuyjlEfuFMAwf62LI+yBJmKwfZEAfyoACvRaSiWtF4kJiaHxbmfdpNmkRVW7I/0YXaZRZxCqrR6cPtjsE7Q6x6wPHpmyxuJkM2vv7r/HZEDAni668xOIkQWs9S7pgx5nCUXD6Kl6+VDaq11y/FFin/a1j73zCFlYLWU6IDth7yxEvkg8kdyLBZpyP3H/olXg1IZkzUBAvbxHtrMMASXaYAs9r0slanZppNkb8MD/ogARoRn1nqurYPdpHvAKlU7zWOWciaJzZsHDeYPoJhnOmJMw2EPVflgcjcuiqxN7GVxBlygP4ANkGSspYr0vH4J+Um1gxVpgPvky3iemmdNDbvIY5njEMw7ooJZEDt1GMXhqGdAtQV9LEh9TNKWnJimZ21eRJDMIURIhYLRLafjFCpnj1aZyGzQIzOOTMJ8oPXZxjbrLhLvTYpq+T0rifmyt1eBXBwSQ4BigcQ7aSwzDIpdXdFan3CBNYJoCVbGBgutZJGi5DErxYdT9yz3/Vhnaf0Ttv49eaxu0zwUNge/7FzYtds6K/GeR6OO89xolGVgRbE9n5zYvUIohm2PJW2OL1O4IxUaAan0WDs3WSjsQXhIT1kpzytMcIf1nL2BSvsN/XSJx1qCZUWZfyLLVSDzsH/Up17hHgMrT2Ax1SSsb8UQV+SszoF2lTJjL962K6LLxJT3bPR44Bay3gjfvdCgbXq++3KTdstjqYcAYZSts7jPn4gy8X5+MxrNG0uP1WSh8Cgiauo+G+M5QL2cT9UgjdHa9RT6j21/ws64PA3lUCldp6FouiNDgQT/+M+/f3yh6eqLT/lo//3nDjWsBMbVBYC3KoOvsjiOD6CVgZmeShXQF9SDAPMyCBc3pqQdlxlYJ3q8aKoXUMqMF4cBgEbxrhklMO9bd03iqxiAg17EJWC9j3//Uvvtt++/3MyfdqthPQaFODY4KgWD9B/3iEGsMxXlBZmelphoD8ogeZbNaZU8lofdXA8G7SEdS/OwYftboC14WNaLkuUSEfH+l7//8EL78OGHL7YP//ppN/9iN5lHpUz37ag3N5688czBy/SScK7CumKse+4dvP/l51//9tXs1593DayP1ao35YKjrVZWXL0hPUVma3rD+jnL7l22Z99ILhrQWYL1P/bO7ydtr4/jn5T2JCUpiUTyhI4HSYgG9Qq8IkQuVAR/pF1wNhFRFHQadD7EKQleaG+WNVQaEhJuiBkJV/6Xz+e0VXHs2XTPsu86OMnoac9ple619+dzTt89q7C/qfz7X6dOVSz4SqH4V50xdJPtFljCCKxX3bTXrpo8hP6Z36xYlb8CrKEmZqRY/yBcI95GYP1/ReK+k4WNwBqB9YKMiqMuUGvXNpS6QNpPgeR187z1/1U8TTN4lieGHK/RqPBl81dfDwVty2g0BMXjtecqxYPv4xk5HPKHzSPF+mEZy0TzALGsOzibt3az9Atko54YLBXdNRIPjYXcAH6Pm58yZxaK8eDx3AisEVjfvT+es8gyqYH/cnUjQmYhmJuZIQHg4uSAicNxaixymbuYIEmAt0TKWAvx8DD9eQTWKBR+9/b4zlLU3eB1Xy37YIFJF0sA8RyUCAbBLBd5D29IFiAcBj6xDp6LojUbWjwfgTUAljCax+q7PUUyRv/HwqiEagUeUgRfNrkZgb1j+qxQQrAoYpAh42PU5849nHU+yrEGFesZWYJVhlaxpphpgCmyaIIVJP6x3M1/Ihswn5PAZYF16UHyrqKzucevxY3A+laOVeknq8LKWJRfJWMOBIu+FlgiJYlsAewRaT4CMJeDKBmnnpkNS7F4eL+a23twvlPTzElgyKezvgZLULV7URGexEuv1uv1qq4IQwqWa4eEgoULGN8lhx6yAFskOEGOMDiGSwsp2L5GSUt5vKhl9BXC6NkYtTH4Au9IeM471GQNhEK1w9RlGvvM+CcodYaWOw3Jso+xT7HxIU4K/U2PLf1bpz4r5ME/v52L+8F/u755EvfBePxs5W2Kg7XVQjgPqTnMr7YPipA+CtNVLWa8dMprOhzeXEnkhzoYDiqWoelsRVEFhQZAClZHFJtMz1BZhVXxGPKl2LFRUDFKKlhXFeyuVir4KVNtE2hFFfq6OnYei5pGqTt0/HMUfOZumgNqW+fSWDdXdaAeU/+V+b6gjRLncrmG/GWcweS9bJRZQTRkQxMtxWoiPC2UsbLI6nhMUMqappWRn4qia5ooirpqiIqIPLKKoWkGJYlWdFVQWRG7qsJvBov/lZ3tNRv8JGDuPHj1njx7PG0+JP5vX4n/KyCBV3+5B8WqmIk6kiRXGU3We/dNDICdMotgtdiyojH1RpVpdpk7VtW62NTVUNOqd1j7wjQbnS5GzJZcpid9qSsVllZ6hlLu4LatP5E1ANbP/M4/PPcX31bTBBrLeO0HO7xNF//oCcXPrKfPNjpaFusboRDBqjZ0JKZZbTNV5UmxGshOu1lXRKZX15qXjCgbl11NvGc6BjYznaYmNzFsam1Ga2jMvah1DDylJVaxXXC8u4H/0b/PUXkZWF80GfHo0FDYMow609Wxoas3FEzutYaCyHRQwqqyrGF3tsV0MP3Se22l0dCZe9rSoMlWhzEasir8FbaZ75tGR+tGvgysy/vGKVu+awuyNSrsiopSxWB3KrDdO4E9VXWmjfjUG0hfXUGwRKWMWnZfbdab2CJe9po6ZvvIYrWsshUng/VNoF7JEffMIvECTvt6ORTZr5P3R7Bo+LLAardaVczVKVh4sNztYnJPwZKN3l212kWmVArWKYL1BUuP6Sg0D/vSwlEhhsxu1enWZP5bR/jXXuMnX9HhwKlvy/0QrGbDmniwwBJMxWKpYom9LuUGB38PYLV0AwudrihjrtVUWEWv95i+CVfngeWaDQ38vjyEMi//Epj4B8w5rWeKFZ14wYlSIAv5WUeS9T9DoQ2WOSo8pROgNlhqmxExx6pijoUZlCEKch9Y90pDbjQUllXkRplpK3SLg0nnJu88uHMpiFkGUdtJSjd0qXszTNGCAYuaSu0OtpmU52znKe+CcfIOID25XdiYAN7uFll5PIN2tRUNbLOqdWWYJvNQu3k8x/zDOSOh+xFYqFgtkwsbLEpaWzS0HmNgz7t2u90yWBMsgU7aY6IvNqtyHbfYXe3UDQOTfSeDJS3Hn4VDqzK/0hcOHxYgfRw99jfRinS8Be4LMpufpMs9WMdXrx+mwXgY/AE2OdO7k+YSSM8vzTtHsQZCIarNo2I1n4HFYqZuPuNhUaG69+02c6crJliCatybmX7VyvjbukqnsZjOKetkxZqJl2rJGIA3MBelU/Chw8UpWA8DJPMgZQ6jGCo93uRiGsYChxMIxISXLlcKac9Ucm+NPhJaDAQLkzBLqIPZH4OpxcMMXufgI4pYhl4LSvlSbQm8dH0IbgJ78Z4SuKN7UQmmTyZhLoHneQ7nSsAn8dL5IF4lwzlPsVSjrqtCVaOTBFWNZfW6Yc4XVOyagEA1m3Ud0652T1dPlSZTl8VqmZoiVFbDJuylYhc8xAq4r/X7cJwHVnr1ZOYTRqTxSGKFLFCfaPgmzM+HYY9k4cPZ9TnZgpmTo9XpIFkOkxQPJxmArSMYu91ObJAg+BNXF9vkLaweWCtxvzmK7JAVCRIfwXexu1PIjcH6eSSX8WG4RFxWlqn7Kwnh7c3CJvhtsOIkPEM8cPwepI2bNGydu/74ezjwSEdQMUViFaViftIP9aFVsWakzAeCCEu51y3LDTqvpZjnWE8RZUWlXW2rjfKV5cZ5Rj/3csSPcjMVK6EYXXJeMgexID+/kyEhyJMlCETckMhNA7+/QI2AebhJAtRmwHuSAi53DYtkGg/XYPujdcXwDAdvSJSCVSNecB8v0MW0AHzvkzR3CqGwHV65Fk/S4CUh9zmCNQNBat35cASHBTxI3sDG5J9/CwefFVquBtuaYO9aUDzUbEcDxsS7TqfNdOiRSn+Tta0MmhscCJa5BmmRZMCdjH4oSGvEzJImCfX9LTFBmLz1w/7D6pBcYQ+OqP0dwfocAkjtwDUGTen2LQWLJlzcLl3KfOaahsLVD1hdL0B8W3pMo9KFGqwuQOpmrjZJatJnBGuZLgjIUffqElkKbZ/NTl9m/3zjxM973hGYeqfd7tRfY2Z2ZI5FwUqOR/ZTq9vS2kmM/qXGI4mPLpjaP1q5DeAID6PfGoLl4nNv4QjlZ28DvFe4TW3CJxz9+Xa3IHFgpd3HIeBcyyZYB+vggnkKlu8p2Z9PlE488H6/Fp+sFcevTLBqGxBDsJb4o8OF2tZm9MjnRMV6RVFkVX2du9SBo0JUF8iSqT2ShtCVtEQd7n6Yv/ZibpU98QRoSk7B8p0vUtnKQm4Pw1YCQ6HHVKx3N5j3Y99F+s4FLPn3U3Q50gAF6/oGET1YgfkcBcUXM39e6WohIkF8wxoV3ppgJUkRw2shDQufcsF8bucDOCV5/zmwKlaorPzVDtL0MklNnK3CBFn0FHb9scSZ591B7L/snW1r4lAWxw8TciHCCnYbllAxgig+wIIWFkT0hTUaNRvEhxdW7fjYFqSdpU5fZF60+2YYWPpx9gPuvYnW2nY6007bnWn/P2gTk2hL/HPOyb3nnmPlKM38sXkrUs77qJcWpofthXtTHx0y02JTLiZusQ6/8jjM0uMsSpXPzApG9rUUa4RyHzVqVfmpk77Bo7LiqUoU+9YVReLJrrKhsH8X/cIisc2yomhb7GO8OWMzUS+3p2n77E9YZf2Ly7/+9cZTk4ky0VT+o7FNtDeKBLPbNLaOIk3a6/I4KxpumWH9LEuWiHkyw9YoygOwbetjNNUm7ZBH+8EGD+iTLbPL467KrBwvTkhOly+NLaI2d6GhyFGVW7y0xY3V9iDtZXbtuWsT652j8lCyDZP0PLeExaOpKQbEFvwDhx377QvrHZQxEnmiy2w+b7xTomUyFhV7/FfPWo2IystpG2ldJXKdpLUu7qBIq4HT1aUbf83KeaPw0ro33fLVZn4hhPXHFwWh1RzyxjfLD9T3W7X4dLwu77C8SNlojXmz/IO8MRd9VyViHeNsNfG82WpT+dPuGizWD3W1OemyrnJLMTPlX/ulzcohNxV467yyIbvNj1X1Cm3YuXW66uq/+YMsFmo3PNmWPbNnejOpqK8srL+8rcJrq4yH5+SNdGD1hPW3V+PPK8cNniysf//1NYGw3ouwav/5x2tShrDeh7DU//79ddEgLADA043WPzmKIn4Ud3+Du0fuXvK49+KOvy+X+AJL3eHyAAAAAAAAAAAAAAAAAAAAAACvifLMFyuv9b/8xvfz/zGR/Nu9FwAAAAAAAAAAAAAAAAD47bnTMVTBmDf4dWS61eBMwWwKeAZ7JUpQb7ZyLulQFvhlXYWqo6qofC8vu2hLNGt5LbUVr7U2bhJ4gq4CHzpm0SA1mVraL6Ld6UtUSgTvK8ByWIXIlnVWLI1LfDfTp6DodlZy/BI/73cCkBd4gsUKM4dvx0l2cFk4mhHpLJYqi1ZFnauITUavc1QitHEHjxaW0mZxU6LSh6iPrJFMRk60eAmxOmnnBZU1KVaBSwRPITRgBiXOhySa9PnOgjQr0y7rttvskMpJHaEWeCozNtGER7RH3T6Licaf7TOrWLT8tGWwXALKAo9HFYE6C22zXb7TTZaLsgjeU8erx0L1SxoxFnj8U2H2czoVb2XsUS69Q4G56CQ7HNHWt4jfzGo7ll5gOoQFHh+81zvx+MkWfxpMJkMkRy65BRPdzkKReG6QSCySrW4GrhA8QVmkqu7GtrkBS1rXjYo0W+xs2wjewZOUtW6ZJhqtT5Z+T1FWjdJk6Ao8WVrkZc9MzMytTmqYKgTP4hfh98DLGS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4b0P3r+e/ni3fhuqcUqXK99/0PXdZmU24v50H3L/Cd7/aO8m4eULzCpavlY8tSpgDc1pE93NkocTtOrBavlob2febNl3E3sbErLSlgw8iAe4SVYHskuwaI/5apcpAnWRQmlWiPJdx1q3ZCWtomISFzZPJ9zdjvfUoQhZO9uEmr4qUrO4YY693HWAppp+bNw3Khv9pNXVVcR+dn29fVSdXBJXP4tjjX9bMFlZhRz7P+T4VIiLHemcU6TYXzIb4j6UaKK6m0RbQTdXTTTh9MZo0YxQw2C8uZgBtcBaKVpEM0FuVpdpnmjLhBO7YoFChlUz6q+7kt0+EbgRBWr9fKMZ0ynav2/lSluMFNVHHAyprJerV53G5++XK5IJ0J8QnFxLmwCqzE3SALdRYk0eKCpvOjCKvyN/ppUJYgLMBd4ZeOj75WyWQxUo9TlMvSosPlY1KKpSnEJZdi3IiV8uOlpxLC2mM7RBMWrh1yYWU7VPsY4NKb0EUyxc/gMREIYfEYy0pSni06hzx+KufJiCgi8to7rZDaS7mSu6EVT1glIaxm7UQIa0HlEyKNzSjRciMwBO8I3kmbp4iMMllXztAZBiiXJ4dFRrkYpeYJUvfTlOYWayUs/twYbyxdoZ/1XVdYvfCE9WFIlbJ4xsQAKeDCukpzi5Wj7pk3fFVrU9JKm/xF+kAj9UgISyVyg3f3W0/uEm0xbubap5nGsUSiQG5uKkqaNilbjrIxXCFYjmPRp5GSOM3tNgZ9EbznWaQ60CnIuMX6tsdd3qHDI6i+GKJKZA0WL/apyLpZtstP1XZz+5rEI3fnIMfD+TAdfZVhdYBCvmyfyBzKtGPUOtEYOQWKFEO6cV6pZ32UifZJ2ptmqWRsCWHFsvlu1ArRdqNWTXPL1L+YWgGya5+dcn6L9hoK1Y0YhAXWGhBD7N5egBVED5TtddAj376abzM33pThMVYGIRK4GzGv5pTFUFXG+FKbngW9yRkv2WE9VSMLFHcuehl08d1MbnGdFoEqbuCOxJazz0rA1BO3uq9+5+LluUkJpgr8nHd8pOWBrsBPWK7HtliF/wOP47vl3qEk8KuOUYGFAs9tsCbb3zFXmoS7Ax42SSJz1Gtd7w43XL8kmVTWoMqWdH1EWeaRqtnLJrwh+InHOYXu22b0AIXO1U3vp1Apvs8KmBIED4dQTcMKEfn0cfCwybfNvBEWvi54aNpyWB1b866/X7CJSgUpseOOgjb1CfNDWOBBe5VlxQUbUoIdf44wk4Jz6xNLkzY6suaOxPyho3krXxB57dUcv3bsRfMlCAs8LKwdphN1ma2K9tCDVkbLcAlFaJclKBHwXRWoOY+RHDdofJaisKN6c4cTdGAFDwsrKGabt1igwo0RNbicJtnFcYeqX0VMpc4LFObCouEB6WfqKviCsMAPheV809bCcpgvzbJmuUqRz2KxoSus05jIePBfnFxH9jLVISzwsLBCrE40Yz5VJIV2WkrN4psqZU9tsse+K53C52JtdKTaCxN3jkujFWBNjL6Dh4QlRVjUEusgzs6MQy6u/PmsyGpcObn2KCrxAyU2jW6TycoVorYI3nlcdlFjyeIWlAUeUJY2HJwUuDGaF/IDvtUaVaeQJqobA0eTnR0ifdCwSWNtkigcVYWwAl0n6HQhLPDwgIObtKex2LLUzKqh/WpZvUuIlZaZf3cHUwG4T1mym8SgnQW8GkWKV/pK9iZ4vLb2Mn1yFzhfF8Xy8kgB+IHRIsqE7E0btZEOT6UxDBR4Ee1BV+Dx9uqHEdPDGVgQHXhJiUJf4IUsnwKVAU8IlXz/Vk6WSPFrpG9F8vdqZXVJxQqIMYvARF4vWs3WSb7fzyr3KVGBa31jwhK1G5RlAWRllTlqxw9J9kYb3BU78npYYrWM1Ss6Su6xhCjwN8mdHvT+197ZvKbORGH84UoH4kKImIUoRgiVGFfalUhcaLWJhiB+LDTmatWmhaKF1i7swq4ubvpH3zOpH23f3rt8X/RNQKqTyYzQH885cc48ye+6YSH71qbCtjZV2O3L2E/Fz+3n3A61aw/07vjB4k5Ywke14oddsv4gHAK+bKXnb8IElsiUVLO13re+RhD6cjf50SX+O3na2aAGonUSivUzmTNzBRTSupsMA1LVbWVC9Rqk1RRidz5eDaX8UF9BiHhPho1YdQKkZYhlUX9o0gBNT+cuM/MRd3GgV6rm5iRgIFNs7Jot6i03jfUk1H43g6DxrSEQNZq9yBnNWZVQyCfGrkznhrXKxTiB7MpsZQOyjh0sZ7H0WBcpx+oyC+Hl47mqQytCG8Wzb70xexwmNkyzcM4snTpc8sJA8xfy7PWpwRIYMmW+YG0sLD94Isceusy0OVhD1ugPnAkUpjWmUXbDo+EVjW+yPGSmavnhyDpnRYTvf7guM5BmepfVRem1VFXrUkDWkYfCxxoIGsmmwJV00GYiQtFCyfPUONL3QF+BuLF4yVaeUxP1DZPnPSIjB4n18VTn3n5tvFT9omX7rQUiKgVHxnIGxF5aWD+TbMUuEjz/KnNDU++a5jFIHYmd8ztJeOsDSw+WCShd9N9sZB+NoN7ryMHiHqRTFselbl7X0RpwPMImI8AwfUlJCoFFkY4UKsHpmmY4WGuXCElA6hTh6AQIdXgZ8wSdRqLwGLobw4lgkKM0i67vuYf8Si9Rm8Gk9ibO66J15daJCy+XQM3EjRqd/OxjzUrajLANwDoFsMIUh1JdFX0fLLthamtKn37US50pEpylHVgTTpnHwZri6gNYoyf/hnDIwSrcJTlYTg4FKC565mE7dW1GbcaznX7MgmRLb69/EliUdHkKqqyhKnH0OrIsR4Ik6+jvCmu8gE/wOhQKrymqiSiIoXr3kl1gpcq5OOXgzxG+L6fsh0JeaRq/nfv+tlcWwPgdAAABz0lEQVSUiikz7tKWpmiaIsLaV5sxr7GZYhBBaUkRkIZxXW7QlpI4eTmWIcHTEFkQWDWNQuF9TFgQWBWX2JKNAlB8C/4vJ/E7lkPJ+xhJplfYNSRtY91aGDyQfrQvWaeheiHR351aY7UK5VToscqMuaRgTUhOhTJucz0iSZOWTOktXKzYWmc1Ac9lgrRRvKvHMZvx4kAijFfndBbFX8RhmWW5+bJe2WyyAmfyqUQz1mdqC5mRWpyXAsetIwcrnIuu5uUznBneOG0QaOOHmwyMNoRcujUTE2lWDt1wP27bqFikXIi35umUjOhFHGd5IqJd6SbylJ3bhqXnYziLWBWuOznK0ZrFOfWCzH9KiPlPGROQuVl3KaWKJrm3ZHneSudtIUkqFpEFdz4RqwQZfaFiOXhwyrGT9f3fd+ftZTbsh8CD58xHIz/hw+evy0KHU8Ln/p9GOXwNasgyPWzze4LgOA20dmYg2JuBCFsDkPa1WhoVQ++rMXvbUWG7VrN/FqawfSwdsHMnPVia7t7uH8Xqz7Nve792i2F1oGlOdd8lOE5Etr5ZD7anqfhfVO3bj58ahL+I5D/PS8Nh+I+XBceJAffvrQcLAVP/ozAp/KfT/QYpCwe9qLGumQAAAABJRU5ErkJggg==|thumb|none|600x426px]]

animations: [
  trigger('openClose', [
    // ...
    state('open', style({
      height: '200px',
      opacity: 1,
      backgroundColor: 'yellow'
    })),
    state('closed', style({
      height: '100px',
      opacity: 0.5,
      backgroundColor: 'green'
    })),
    transition('open => closed', [
      animate('1s')
    ]),
    transition('closed => open', [
      animate('0.5s')
    ]),
    transition('* => closed', [
      animate('1s')
    ]),
    transition('* => open', [
      animate('0.5s')
    ]),
    transition('open <=> closed', [
      animate('0.5s')
    ]),
    transition ('* => open', [
      animate ('1s',
        style ({ opacity: '*' }),
      ),
    ]),
    transition('* => *', [
      animate('1s')
    ]),

The * => * transition applies when any change between two states takes place.

Transitions are matched in the order in which they are defined. Thus, you can apply other transitions on top of the * => * (any-to-any) transition. For example, define style changes or animations that would apply just to open => closed, or just to closed => open, and then use * => * as a fallback for state pairings that aren't otherwise called out.

To do this, list the more specific transitions before * => *.

Using wildcards with styles

Use the wildcard * with a style to tell the animation to use whatever the current style value is, and animate with that. Wildcard is a fallback value that's used if the state being animated isn't declared within the trigger.

transition ('* => open', [
  animate ('1s',
    style ({ opacity: '*' }),
  ),
]),

Void state

You can use the void state to configure transitions for an element that is entering or leaving a page. See Animating entering and leaving a view.

Combining wildcard and void states

You can combine wildcard and void states in a transition to trigger animations that enter and leave the page:

  • A transition of * => void applies when the element leaves a view, regardless of what state it was in before it left.
  • A transition of void => * applies when the element enters a view, regardless of what state it assumes when entering.
  • The wildcard state * matches to any state, including void.

Animating entering and leaving a view

This section shows how to animate elements entering or leaving a page.

Note: For our purposes, an element entering or leaving a view is equivalent to being inserted or removed from the DOM.

Now we'll add a new behavior:

  • When you add a hero to the list of heroes, it appears to fly onto the page from the left.
  • When you remove a hero from the list, it appears to fly out to the right.
animations: [
  trigger('flyInOut', [
    state('in', style({ transform: 'translateX(0)' })),
    transition('void => *', [
      style({ transform: 'translateX(-100%)' }),
      animate(100)
    ]),
    transition('* => void', [
      animate(100, style({ transform: 'translateX(100%)' }))
    ])
  ])
]

In the above code, we applied the void state when the HTML element isn't attached to a view.

:enter and :leave aliases

:enter and :leave are aliases for the void => * and * => void transitions. These aliases are used by several animation functions.

transition ( ':enter', [ ... ] );  // alias for void => *
transition ( ':leave', [ ... ] );  // alias for * => void

It's harder to target an element that is entering a view because it isn't in the DOM yet. So, use the aliases :enter and :leave to target HTML elements that are inserted or removed from a view.

Use of *ngIf and *ngFor with :enter and :leave

The :enter transition runs when any *ngIf or *ngFor views are placed on the page, and :leave runs when those views are removed from the page.

In this example, we have a special trigger for the enter and leave animation called myInsertRemoveTrigger. The HTML template contains the following code.

<div @myInsertRemoveTrigger *ngIf="isShown" class="insert-remove-container">
  <p>The box is inserted</p>
</div>

In the component file, the :enter transition sets an initial opacity of 0, and then animates it to change that opacity to 1 as the element is inserted into the view.

trigger('myInsertRemoveTrigger', [
  transition(':enter', [
    style({ opacity: 0 }),
    animate('5s', style({ opacity: 1 })),
  ]),
  transition(':leave', [
    animate('5s', style({ opacity: 0 }))
  ])
]),

Note that this example doesn't need to use state().

:increment and :decrement in transitions

The transition() function takes additional selector values, :increment and :decrement. Use these to kick off a transition when a numeric value has increased or decreased in value.

Note: The following example uses query() and stagger() methods, which is discussed in the complex sequences page.

trigger('filterAnimation', [
  transition(':enter, * => 0, * => -1', []),
  transition(':increment', [
    query(':enter', [
      style({ opacity: 0, width: '0px' }),
      stagger(50, [
        animate('300ms ease-out', style({ opacity: 1, width: '*' })),
      ]),
    ], { optional: true })
  ]),
  transition(':decrement', [
    query(':leave', [
      stagger(50, [
        animate('300ms ease-out', style({ opacity: 0, width: '0px' })),
      ]),
    ])
  ]),
]),

Boolean values in transitions

If a trigger contains a boolean value as a binding value, then this value can be matched using a transition() expression that compares true and false, or 1 and 0.

<div [@openClose]="isOpen ? true : false" class="open-close-container">
</div>

In the code snippet above, the HTML template binds a <div> element to a trigger named openClose with a status expression of isOpen, and with possible values of true and false. This is an alternative to the practice of creating two named states of open and close.

In the component code, in the @Component metadata under the animations: property, when the state evaluates to true (meaning "open" here), the associated HTML element's height is a wildcard style or default. In this case, use whatever height the element already had before the animation started. When the element is "closed," the element animates to a height of 0, which makes it invisible.

animations: [
  trigger('openClose', [
    state('true', style({ height: '*' })),
    state('false', style({ height: '0px' })),
    transition('false <=> true', animate(500))
  ])
],

Multiple animation triggers

You can define more than one animation trigger for a component. You can attach animation triggers to different elements, and the parent-child relationships among the elements affect how and when the animations run.

Parent-child animations

Each time an animation is triggered in Angular, the parent animation always get priority and child animations are blocked. In order for a child animation to run, the parent animation must query each of the elements containing child animations and then allow the animations to run using the animateChild() function.

Disabling an animation on an HTML element

A special animation control binding called @.disabled can be placed on an HTML element to disable animations on that element, as well as any nested elements. When true, the @.disabled binding prevents all animations from rendering.

The code sample below shows how to use this feature.

<div [@.disabled]="isDisabled">
  <div [@childAnimation]="isOpen ? 'open' : 'closed'"
    class="open-close-container">
    <p>The box is now {{ isOpen ? 'Open' : 'Closed' }}!</p>
  </div>
</div>
@Component({
  animations: [
    trigger('childAnimation', [
      // ...
    ]),
  ],
})
export class OpenCloseChildComponent {
  isDisabled = false;
  isOpen = false;
}

When the @.disabled binding is true, the @childAnimation trigger doesn't kick off.

When an element within an HTML template has animations disabled using the @.disabled host binding, animations are disabled on all inner elements as well. You can't selectively disable multiple animations on a single element.

However, selective child animations can still be run on a disabled parent in one of the following ways:

  • A parent animation can use the query() function to collect inner elements located in disabled areas of the HTML template. Those elements can still animate.
  • A subanimation can be queried by a parent and then later animated with the animateChild() function.

Disabling all animations

To disable all animations for an Angular app, place the @.disabled host binding on the topmost Angular component.

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.css'],
  animations: [
    slideInAnimation
    // animation triggers go here
  ]
})
export class AppComponent {
  @HostBinding('@.disabled')
  public animationsDisabled = false;
}

Note: Disabling animations application-wide is useful during end-to-end (E2E) testing.

Animation callbacks

The animation trigger() function emits callbacks when it starts and when it finishes. In the example below we have a component that contains an openClose trigger.

@Component({
  selector: 'app-open-close',
  animations: [
    trigger('openClose', [
      // ...
    ]),
  ],
  templateUrl: 'open-close.component.html',
  styleUrls: ['open-close.component.css']
})
export class OpenCloseComponent {
  onAnimationEvent ( event: AnimationEvent ) {
  }
}

In the HTML template, the animation event is passed back via $event, as @trigger.start and @trigger.done, where trigger is the name of the trigger being used. In our example, the trigger openClose appears as follows.

<div [@openClose]="isOpen ? 'open' : 'closed'"
    (@openClose.start)="onAnimationEvent($event)"
    (@openClose.done)="onAnimationEvent($event)"
    class="open-close-container">
</div>

A potential use for animation callbacks could be to cover for a slow API call, such as a database lookup. For example, you could set up the InProgress button to have its own looping animation where it pulsates or does some other visual motion while the backend system operation finishes.

Then, another animation can be called when the current animation finishes. For example, the button goes from the inProgress state to the closed state when the API call is completed.

An animation can influence an end user to perceive the operation as faster, even when it isn't. Thus, a simple animation can be a cost-effective way to keep users happy, rather than seeking to improve the speed of a server call and having to compensate for circumstances beyond your control, such as an unreliable network connection.

Callbacks can serve as a debugging tool, for example in conjunction with console.warn() to view the application's progress in a browser's Developer JavaScript Console. The following code snippet creates console log output for our original example, a button with the two states of open and closed.

export class OpenCloseComponent {
  onAnimationEvent ( event: AnimationEvent ) {
    // openClose is trigger name in this example
    console.warn(`Animation Trigger: ${event.triggerName}`);

    // phaseName is start or done
    console.warn(`Phase: ${event.phaseName}`);

    // in our example, totalTime is 1000 or 1 second
    console.warn(`Total time: ${event.totalTime}`);

    // in our example, fromState is either open or closed
    console.warn(`From: ${event.fromState}`);

    // in our example, toState either open or closed
    console.warn(`To: ${event.toState}`);

    // the HTML element itself, the button in this case
    console.warn(`Element: ${event.element}`);
  }
}

Keyframes

In the previous section, we saw a simple two-state transition. Now we'll create an animation with multiple steps run in sequence using keyframes.

Angular's keyframe() function is similar to keyframes in CSS. Keyframes allow several style changes within a single timing segment. For example, our button, instead of fading, could change color several times over a single 2-second timespan.

[[../File:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAD0CAMAAABafyQMAAA57mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wMS0xNlQxNjoxMy0wODowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTAxLTE2VDE2OjE3OjQ0LTA4OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0xNlQxNjoxNzo0NC0wODowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo2ODE3M2E5My04M2U5LTRjMjMtYWZhZi1lMjg0ZWNjODczMzM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDozYjlkOTQ5NS0zYmFhLTExN2ItYWFkNy1hM2RjOTQ0ZGM3Yjc8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDpkNjY1MWRjNS0wNjg3LTQ3M2QtOWQwOS0xNzg5MGM1YzUyZjg8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDY2NTFkYzUtMDY4Ny00NzNkLTlkMDktMTc4OTBjNWM1MmY4PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTE2VDE2OjEzLTA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjgxNzNhOTMtODNlOS00YzIzLWFmYWYtZTI4NGVjYzg3MzMzPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTE2VDE2OjE3OjQ0LTA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+F6WmdwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAwBQTFRF////0dzw/4R//7x//wIB/sACssTm////////Q3LE+vr8/8CA/5+A/82A/9OARXXK/wAA09rn/4eA/6J//6uA/8OA/7l/44yVlq/Pq6W//7aA/7OA/9yA/9mA/5mA/6WA1ZOgrMDlQmKZ/8eA/4x+LVKPAQABgrff/9B/hrbck7DT/9aAmq7MpKnF/6iA/66Ap6jC/46AzpWl2ZGd64mP54qS/5yA/5aA/7GAr6S9+oOFvJ2zy5eoxJut346Y/8qA/4F8vs7rj7LV/4qA/5SA/uB/irTYnazK/5GAoarHuZ+0sqG7taG4yJmq0ZSjtMjp7oiNjbLWt5+29oSH8oaK/4+A3I+a/9+AHkGBs9DpQG29IlKTa4Gt5enwKUyL25Cbv52xxpmribXawZyv9IWInqvJ8IeL/IKD2/L+VmNpw8zcH0SFzNjusMLlvc7h3+bxNFaJ2uv+/+d8PWi0ACuYF0qO/9MANU6JkodLBU+ZQW/AFkGO2u//BTeY6uzyKFCQ/8gA/8ABlJaT3A8Z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|thumb|none|500x244px]]

The code for this color change might look like this.

transition('* => active', [
  animate('2s', keyframes([
    style({ backgroundColor: 'blue' }),
    style({ backgroundColor: 'red' }),
    style({ backgroundColor: 'orange' })
  ]))

Offset

Keyframes include an offset that defines the point in the animation where each style change occurs. Offsets are relative measures from zero to one, marking the beginning and end of the animation, respectively and should be applied to each of the keyframe's steps if used at least once.

Defining offsets for keyframes is optional. If you omit them, evenly spaced offsets are automatically assigned. For example, three keyframes without predefined offsets receive offsets of 0, 0.5, and 1. Specifying an offset of 0.8 for the middle transition in the above example might look like this.

[[../File:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAD3CAMAAADc61aiAAA59GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wMS0xNlQxNjoxMzoyNi0wODowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTAxLTE2VDE2OjE3OjEzLTA4OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0xNlQxNjoxNzoxMy0wODowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDo3MmUzOWIyNi03ZjY5LTQyNmMtOTM4NS00YmI2MjdjZGNkZTU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyOTA4NmE5Mi0zYmFhLTExN2ItYWFkNy1hM2RjOTQ0ZGM3Yjc8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo0OWVjNjNjZi0zOGM1LTQzZjMtYmRhNC01MWQzZmNjNDllZDg8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NDllYzYzY2YtMzhjNS00M2YzLWJkYTQtNTFkM2ZjYzQ5ZWQ4PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTE2VDE2OjEzOjI2LTA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzJlMzliMjYtN2Y2OS00MjZjLTkzODUtNGJiNjI3Y2RjZGU1PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTE2VDE2OjE3OjEzLTA4OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjI0NzwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+gw0+KQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAwBQTFRF////orPO/wAA0JWj/sAC2+PzrcDl////Q3LE/wIB346XoLDMoqrGyZipvp2xt6C32ZGd25Cb05OhsqK7TmyggbjfnazKpajEk7DSla/QrKW/+YKEoKvIuZ+094SGrqS99YWI8oaK64mQ8IeL7YiOQ3PGAQAC7v7//5iA/7OA/82Ama7Nh7XbhLfdmK7Oi7PYibXZzJenzpamwZyvx5mr1pKfu56ztKG54oyV5IuU/YGCobPQm7TgGD18+fn7jbLX9Pz//52A/8CA/6eAACmNWWhy/8aA/9KAO2aw/6J//66A/7t/m63M/5KAqabAp6fC+4KD3Y+Z5ouS6YqR/46A/9EAqZM7/8YA/8EA6O74qLzjE1OZ7vL5/v//Mlma/6qA/7h//8iA/9mAqafB4+v3kbDUjrLVhrbcj7LVkLLVwpyuxJutw5utxZmsCjJ3/9aAA0CNAC+ai3+gg4GlR2ab6/f/RnfNfIWrAE6aqyI6O02HWUJyRnbLhr7ndoewM1WR8wcJ/4aA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|thumb|none|500x247px]]

The code with offsets specified would be as follows.

transition('* => active', [
  animate('2s', keyframes([
    style({ backgroundColor: 'blue', offset: 0}),
    style({ backgroundColor: 'red', offset: 0.8}),
    style({ backgroundColor: 'orange', offset: 1.0})
  ])),
]),
transition('* => inactive', [
  animate('2s', keyframes([
    style({ backgroundColor: 'orange', offset: 0}),
    style({ backgroundColor: 'red', offset: 0.2}),
    style({ backgroundColor: 'blue', offset: 1.0})
  ]))
]),

You can combine keyframes with duration, delay, and easing within a single animation.

Keyframes with a pulsation

Use keyframes to create a pulse effect in your animations by defining styles at specific offset throughout the animation.

Here's an example of using keyframes to create a pulse effect:

  • The original open and closed states, with the original changes in height, color, and opacity, occurring over a timeframe of 1 second
  • A keyframes sequence inserted in the middle that causes the button to appear to pulsate irregularly over the course of that same 1-second timeframe

[[../File:data:image/png;base64,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|thumb|none|600x312px]]

The code snippet for this animation might look like this.

trigger('openClose', [
  state('open', style({
    height: '200px',
    opacity: 1,
    backgroundColor: 'yellow'
  })),
  state('close', style({
    height: '100px',
    opacity: 0.5,
    backgroundColor: 'green'
  })),
  // ...
  transition('* => *', [
    animate('1s', keyframes ( [
      style({ opacity: 0.1, offset: 0.1 }),
      style({ opacity: 0.6, offset: 0.2 }),
      style({ opacity: 1,   offset: 0.5 }),
      style({ opacity: 0.2, offset: 0.7 })
    ]))
  ])
])

Animatable properties and units

Angular's animation support builds on top of web animations, so you can animate any property that the browser considers animatable. This includes positions, sizes, transforms, colors, borders, and more. The W3C maintains a list of animatable properties on its CSS Transitions page.

For positional properties with a numeric value, define a unit by providing the value as a string, in quotes, with the appropriate suffix:

  • 50 pixels: '50px'
  • Relative font size: '3em'
  • Percentage: '100%'

If you don't provide a unit when specifying dimension, Angular assumes a default unit of pixels, or px. Expressing 50 pixels as 50 is the same as saying '50px'.

Automatic property calculation with wildcards

Sometimes you don't know the value of a dimensional style property until runtime. For example, elements often have widths and heights that depend on their content and the screen size. These properties are often challenging to animate using CSS.

In these cases, you can use a special wildcard * property value under style(), so that the value of that particular style property is computed at runtime and then plugged into the animation.

In this example, we have a trigger called shrinkOut, used when an HTML element leaves the page. The animation takes whatever height the element has before it leaves, and animates from that height to zero.

animations: [
  trigger('shrinkOut', [
    state('in', style({ height: '*' })),
    transition('* => void', [
      style({ height: '*' }),
      animate(250, style({ height: 0 }))
    ])
  ])
]

Keyframes summary

The keyframes() function in Angular allows you to specify multiple interim styles within a single transition, with an optional offset to define the point in the animation where each style change occurs.

More on Angular animations

You may also be interested in the following:

© 2010–2020 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://v8.angular.io/guide/transition-and-triggers