11import { Fireworks as FireworksJs } from 'fireworks-js'
2- import type { FireworksOptions } from 'fireworks-js'
2+ import type { FireworksHandlers , FireworksOptions } from 'fireworks-js'
33import type { ComponentChildren } from 'preact'
44import React from 'preact/compat'
55import { useEffect , useImperativeHandle , useRef } from 'preact/hooks'
66
77interface FireworksProps extends React . HTMLAttributes < HTMLDivElement > {
88 children ?: ComponentChildren
99 options ?: FireworksOptions
10- }
11-
12- interface FireworksHandlers
13- extends Pick <
14- FireworksJs ,
15- 'isRunning' | 'start' | 'pause' | 'clear' | 'updateOptions' | 'updateSize'
16- > {
17- stop ( ) : void
10+ autostart ?: boolean
1811}
1912
2013const Fireworks = React . forwardRef < FireworksHandlers , FireworksProps > (
21- ( { children, options, ...rest } , ref ) => {
14+ ( { children, options, autostart = true , ...rest } , ref ) => {
2215 const container = useRef < HTMLDivElement > ( null )
2316 const fireworks = useRef < FireworksJs | null > ( null )
2417
@@ -32,6 +25,9 @@ const Fireworks = React.forwardRef<FireworksHandlers, FireworksProps>(
3225 stop ( ) {
3326 fireworks . current ! . stop ( )
3427 } ,
28+ async waitStop ( ) {
29+ await fireworks . current ! . waitStop ( )
30+ } ,
3531 pause ( ) {
3632 fireworks . current ! . pause ( )
3733 } ,
@@ -43,15 +39,20 @@ const Fireworks = React.forwardRef<FireworksHandlers, FireworksProps>(
4339 } ,
4440 updateSize ( size ) {
4541 fireworks . current ! . updateSize ( size )
42+ } ,
43+ updateBoundaries ( boundaries ) {
44+ fireworks . current ! . updateBoundaries ( boundaries )
4645 }
4746 } ) )
4847
4948 useEffect ( ( ) => {
5049 fireworks . current = new FireworksJs ( container . current ! , options )
51- fireworks . current . start ( )
50+ if ( autostart ) {
51+ fireworks . current . start ( )
52+ }
5253
5354 return ( ) => {
54- fireworks . current ! . stop ( true )
55+ fireworks . current ! . stop ( )
5556 }
5657 } , [ ] )
5758
0 commit comments