11import { Fireworks as FireworksJs } from 'fireworks-js'
2- import type { FireworksOptions } from 'fireworks-js'
2+ import type { FireworksHandlers , FireworksOptions } from 'fireworks-js'
33import React , { useEffect , useImperativeHandle , useRef } from 'react'
44
55interface FireworksProps extends React . HTMLAttributes < HTMLDivElement > {
66 children ?: React . ReactNode
77 options ?: FireworksOptions
8- }
9-
10- interface FireworksHandlers
11- extends Pick <
12- FireworksJs ,
13- 'isRunning' | 'start' | 'pause' | 'clear' | 'updateOptions' | 'updateSize'
14- > {
15- stop ( ) : void
8+ autostart ?: boolean
169}
1710
1811const Fireworks = React . forwardRef < FireworksHandlers , FireworksProps > (
19- ( { children, options, ...rest } , ref ) => {
12+ ( { children, options, autostart = true , ...rest } , ref ) => {
2013 const container = useRef < HTMLDivElement > ( null )
2114 const fireworks = useRef < FireworksJs | null > ( null )
2215
@@ -30,6 +23,9 @@ const Fireworks = React.forwardRef<FireworksHandlers, FireworksProps>(
3023 stop ( ) {
3124 fireworks . current ! . stop ( )
3225 } ,
26+ async waitStop ( ) {
27+ await fireworks . current ! . waitStop ( )
28+ } ,
3329 pause ( ) {
3430 fireworks . current ! . pause ( )
3531 } ,
@@ -41,15 +37,23 @@ const Fireworks = React.forwardRef<FireworksHandlers, FireworksProps>(
4137 } ,
4238 updateSize ( size ) {
4339 fireworks . current ! . updateSize ( size )
40+ } ,
41+ updateBoundaries ( boundaries ) {
42+ fireworks . current ! . updateBoundaries ( boundaries )
4443 }
4544 } ) )
4645
4746 useEffect ( ( ) => {
48- fireworks . current = new FireworksJs ( container . current ! , options )
49- fireworks . current . start ( )
47+ if ( ! fireworks . current ) {
48+ fireworks . current = new FireworksJs ( container . current ! , options )
49+ }
50+
51+ if ( autostart ) {
52+ fireworks . current . start ( )
53+ }
5054
5155 return ( ) => {
52- fireworks . current ! . stop ( true )
56+ fireworks . current ! . stop ( )
5357 }
5458 } , [ ] )
5559
0 commit comments