12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- <!-- Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/ -->
- <script setup lang="ts">
- import { useViewTransition } from './useViewTransition.ts'
- const { viewTransition } = useViewTransition()
- </script>
- <template>
- <main class="grid flex-1 overflow-hidden">
- <Transition :name="viewTransition">
- <slot></slot>
- </Transition>
- </main>
- </template>
- <style scoped>
- /* First example idea from: https://codesandbox.io/s/zq5mw2zk9x */
- main {
- grid-template: 'main';
- }
- main > * {
- grid-area: main; /* Transition: make sections overlap on same cell */
- }
- /* next */
- .next-leave-to {
- animation: leaveToLeft 300ms both cubic-bezier(0.19, 0.61, 0.44, 1);
- z-index: 0;
- }
- .next-enter-to {
- animation: enterFromRight 400ms both cubic-bezier(0.19, 0.61, 0.44, 1);
- z-index: 1;
- }
- @keyframes leaveToLeft {
- from {
- transform: translateX(0);
- }
- to {
- transform: translateX(-25%);
- filter: brightness(0.4);
- }
- }
- @keyframes enterFromRight {
- from {
- transform: translateX(100%);
- }
- to {
- transform: translateX(0);
- }
- }
- /* prev */
- .prev-leave-to {
- animation: leaveToRight 400ms both cubic-bezier(0.19, 0.61, 0.44, 1);
- z-index: 1;
- }
- .prev-enter-to {
- animation: enterFromLeft 300ms both cubic-bezier(0.19, 0.61, 0.44, 1);
- z-index: 0;
- }
- @keyframes enterFromLeft {
- from {
- transform: translateX(-25%);
- filter: brightness(0.5);
- }
- to {
- transform: translateX(0);
- }
- }
- @keyframes leaveToRight {
- from {
- transform: translateX(0);
- filter: brightness(0.9);
- }
- to {
- transform: translateX(100%);
- filter: brightness(0.8);
- }
- }
- </style>
|