@@ -56,12 +56,20 @@ export default function AboutSection() {
5656
5757 const [ isBubbleHidden , setIsBubbleHidden ] = useState ( false ) ;
5858
59+ //add a mobile flag (updates on resize)
60+ const [ isMobile , setIsMobile ] = useState ( window . innerWidth <= 768 ) ;
61+ useEffect ( ( ) => {
62+ const onResize = ( ) => setIsMobile ( window . innerWidth <= 768 ) ;
63+ window . addEventListener ( "resize" , onResize ) ;
64+ return ( ) => window . removeEventListener ( "resize" , onResize ) ;
65+ } , [ ] ) ;
66+
5967 //Handle dog scale according to the width of the screen
6068 const [ dogScale , setDogScale ] = useState ( getScaleForWidth ( window . innerWidth ) ) ;
6169 function getScaleForWidth ( width ) {
62- if ( width < 480 ) {
70+ if ( width <= 480 ) {
6371 return 1.5 ;
64- } else if ( width < 768 ) {
72+ } else if ( width <= 768 ) {
6573 return 2.0 ;
6674 } else {
6775 return 2.5 ;
@@ -185,12 +193,26 @@ export default function AboutSection() {
185193 data-direction = { direction }
186194 style = {
187195 direction === 1
188- ? window . innerWidth < 768
196+ ? window . innerWidth <= 768
189197 ? { left : `${ MOUTH_X - 100 } px` }
190198 : { left : `${ MOUTH_X } px` }
191199 : { left : `${ MOUTH_X - 48 } px` }
192200 }
193201 >
202+ { /* close button (only shown on small screens) */ }
203+ < button
204+ type = "button"
205+ className = { styles . bubbleClose }
206+ aria-label = {
207+ isBubbleHidden ? "Show message" : "Hide message"
208+ }
209+ onClick = { ( e ) => {
210+ e . stopPropagation ( ) ;
211+ setIsBubbleHidden ( ( v ) => ! v ) ;
212+ } }
213+ >
214+ ×
215+ </ button >
194216 < strong style = { { fontSize : 15 } } >
195217 { dogBubbles [ selectedPanel ] . title }
196218 </ strong >
0 commit comments