@@ -15,13 +15,13 @@ export default (() => {
1515 const updateSnacksTheme = ( ) => {
1616 const theme = document . querySelector ( 'html' ) . dataset . theme ;
1717 document . querySelectorAll ( '.snack-player' ) . forEach ( snack => {
18- snack . dataset . snackTheme = theme ;
18+ ( snack as HTMLElement ) . dataset . snackTheme = theme ;
1919 } ) ;
2020 } ;
2121
2222 const initSnackPlayers = ( ) => {
2323 updateSnacksTheme ( ) ;
24- window . ExpoSnack && window . ExpoSnack . initialize ( ) ;
24+ window ? .ExpoSnack ? .initialize ( ) ;
2525 } ;
2626
2727 const setupTabPanelsMutationObservers = ( ) => {
@@ -53,8 +53,8 @@ export default (() => {
5353 if ( 'ExpoSnack' in window ) {
5454 document . querySelectorAll ( '.snack-player' ) . forEach ( container => {
5555 updateSnacksTheme ( ) ;
56- window . ExpoSnack && window . ExpoSnack . remove ( container ) ;
57- window . ExpoSnack && window . ExpoSnack . append ( container ) ;
56+ window ? .ExpoSnack ? .remove ( container ) ;
57+ window ? .ExpoSnack ? .append ( container ) ;
5858 } ) ;
5959 }
6060 } ) . observe ( document . getElementsByTagName ( 'html' ) [ 0 ] , {
@@ -65,13 +65,34 @@ export default (() => {
6565 } ) ;
6666 } ;
6767
68+ const setupSnackObserver = ( ) => {
69+ const observer = new MutationObserver ( ( ) => {
70+ const snacks = document . body . querySelectorAll ( '.snack-player' ) ;
71+
72+ if ( snacks . length ) {
73+ initSnackPlayers ( ) ;
74+ }
75+ } ) ;
76+
77+ // Homepage or Showcase pages does not use MDX content, so `.container` node is not present there
78+ const mdxContentContainer = document . body . querySelector ( '.container' ) ;
79+ if ( mdxContentContainer ) {
80+ observer . observe ( mdxContentContainer , {
81+ childList : true ,
82+ subtree : true ,
83+ } ) ;
84+ }
85+ } ;
86+
6887 // Need to set the theme before the snack script (deferred) initialize
6988 updateSnacksTheme ( ) ;
89+ setupSnackObserver ( ) ;
7090 setupThemeSynchronization ( ) ;
7191
7292 return {
7393 onRouteDidUpdate ( ) {
7494 initSnackPlayers ( ) ;
95+ setupSnackObserver ( ) ;
7596 setupTabPanelsMutationObservers ( ) ;
7697 } ,
7798 } ;
0 commit comments