11import { defineComponent , h , onMounted , provide , ref , RendererElement , Transition } from 'vue'
22
3+ import { executeAfterTransition } from './../../utils/transition'
4+
35import { Color } from '../props'
46
57const CToast = defineComponent ( {
@@ -79,29 +81,31 @@ const CToast = defineComponent({
7981}
8082provide ( 'updateVisible' , updateVisible )
8183
84+ const handleBeforeEnter = ( el :RendererElement ) => {
85+ el . classList . add ( 'showing' )
86+ }
87+
8288const handleEnter = ( el :RendererElement , done :( ) => void ) => {
83- el . addEventListener ( 'transitionend' , ( ) => {
84- done ( )
85- } )
89+ executeAfterTransition ( ( ) => done ( ) , el as HTMLElement )
90+ el . classList . add ( 'show' )
8691setTimeout ( ( ) => {
87- el . classList . add ( 'show ')
92+ el . classList . remove ( 'showing ')
8893} , 1 )
94+
8995if ( props . index ) {
9096emit ( 'show' , props . index )
9197} else {
9298emit ( 'show' )
9399}
94100}
95- const handleBeforeLeave = ( el :RendererElement ) => {
96- el . classList . remove ( 'show' )
97- }
101+
98102const handleLeave = ( el :RendererElement , done :( ) => void ) => {
99- el . addEventListener ( 'transitionend' , ( ) => {
100- done ( )
101- } )
102- el . classList . remove ( 'show' )
103+ executeAfterTransition ( ( ) => done ( ) , el as HTMLElement )
104+ el . classList . add ( 'showing' )
103105}
106+
104107const handleAfterLeave = ( el :RendererElement ) => {
108+ el . classList . remove ( 'show' )
105109el . classList . add ( 'hide' )
106110if ( props . index ) {
107111emit ( 'close' , props . index )
@@ -125,8 +129,8 @@ const CToast = defineComponent({
125129Transition ,
126130{
127131appear :true ,
132+ onBeforeEnter :( el ) => handleBeforeEnter ( el ) ,
128133onEnter :( el , done ) => handleEnter ( el , done ) ,
129- onBeforeLeave :( el ) => handleBeforeLeave ( el ) ,
130134onLeave :( el , done ) => handleLeave ( el , done ) ,
131135onAfterLeave :( el ) => handleAfterLeave ( el ) ,
132136} ,