@@ -11,12 +11,12 @@ import {
1111 withDirectives
1212} from 'vue'
1313
14+ import type { NinjaToastEventBus } from '../events'
1415import type { NinjaToasterProps } from '../../props'
1516import { usePausableTimeout } from '../composables/usePausableTimeout'
1617import { useNinjaToasterContainer } from '../composables/useNinjaToasterContainer'
1718import { createNinjaToasterState } from '../composables/useNinjaToasterState'
1819import { type NinjaToasterRenderQueue , createRenderQueue } from '../queue'
19- import { useNuxtApp } from '#app'
2020
2121export default defineComponent ( {
2222 name : 'NinjaToaster' ,
@@ -28,7 +28,7 @@ export default defineComponent({
2828 required : true
2929 } ,
3030 duration : {
31- type : Number as PropType < NinjaToasterProps [ 'duration' ] > ,
31+ type : Number ,
3232 default : 5000
3333 } ,
3434 transition : {
@@ -40,16 +40,24 @@ export default defineComponent({
4040 default : ( ) => ( { } as NinjaToasterProps [ 'theme' ] )
4141 } ,
4242 dismissible : {
43- type : Boolean as PropType < NinjaToasterProps [ 'dismissible' ] > ,
43+ type : Boolean ,
4444 default : true
4545 } ,
4646 pauseOnHover : {
47- type : Boolean as PropType < NinjaToasterProps [ 'pauseOnHover' ] > ,
47+ type : Boolean ,
4848 default : true
4949 } ,
5050 maxToasts : {
51- type : Number as PropType < NinjaToasterProps [ 'maxToasts' ] > ,
51+ type : Number ,
5252 default : Infinity
53+ } ,
54+ queues : {
55+ type : Map as PropType < Map < string , NinjaToasterRenderQueue > > ,
56+ default : ( ) => new Map ( )
57+ } ,
58+ events : {
59+ type : Object as PropType < NinjaToastEventBus > ,
60+ default : ( ) => ( { } )
5361 }
5462 } ,
5563 emits : [ 'close' , 'click' , 'show' ] ,
@@ -63,15 +71,13 @@ export default defineComponent({
6371 const isActive = ref ( false )
6472 const unqueue = ref < ( ) => void > ( )
6573 const rootElement = ref < HTMLElement > ( )
66- const nuxt = useNuxtApp ( )
67- const events = nuxt . $nt . events
6874 let queue : NinjaToasterRenderQueue
6975
70- if ( nuxt . $nt . queues . has ( containerId ) ) {
71- queue = nuxt . $nt . queues . get ( containerId )
76+ if ( props . queues . has ( containerId ) ) {
77+ queue = props . queues . get ( containerId ) !
7278 } else {
7379 queue = createRenderQueue ( )
74- nuxt . $nt . queues . set ( containerId , queue )
80+ props . queues . set ( containerId , queue )
7581 }
7682
7783 const content = computed ( ( ) => {
@@ -81,6 +87,10 @@ export default defineComponent({
8187 } )
8288
8389 const shouldQueue = ( ) => {
90+ if ( ! container . value ) {
91+ return false
92+ }
93+
8494 if ( props . maxToasts <= 0 || props . maxToasts === Infinity ) {
8595 return false
8696 }
@@ -116,6 +126,10 @@ export default defineComponent({
116126 return
117127 }
118128
129+ if ( ! container . value || ! rootElement . value ) {
130+ return
131+ }
132+
119133 container . value . insertAdjacentElement ( 'afterbegin' , rootElement . value )
120134 isActive . value = true
121135
@@ -175,19 +189,19 @@ export default defineComponent({
175189 if ( typeof rootElement . value ?. remove !== 'undefined' ) {
176190 rootElement . value ?. remove ( )
177191 } else {
178- rootElement . value ?. parentNode . removeChild ( rootElement . value )
192+ rootElement . value ?. parentNode ? .removeChild ( rootElement . value )
179193 }
180194 }
181195
182196 onMounted ( ( ) => {
183197 show ( )
184198
185- events . on ( 'clear' , close )
186- events . on ( `clear-${ containerId } ` , close )
199+ props . events . on ( 'clear' , close )
200+ props . events . on ( `clear-${ containerId } ` , close )
187201 } )
188202 onBeforeUnmount ( ( ) => {
189- events . off ( 'clear' , close )
190- events . off ( `clear-${ containerId } ` , close )
203+ props . events . off ( 'clear' , close )
204+ props . events . off ( `clear-${ containerId } ` , close )
191205 } )
192206
193207 createNinjaToasterState ( {
@@ -206,7 +220,7 @@ export default defineComponent({
206220 {
207221 role : 'alert' ,
208222 tabindex : 0 ,
209- class : props . theme . wrapperClass ,
223+ class : props . theme ? .wrapperClass ,
210224 onMouseover,
211225 onMouseleave,
212226 onFocus,
0 commit comments