@@ -161,29 +161,52 @@ export const GlobalColorSchemeStyles = () => {
161161 // Adds a class to the editor body DOM to indicate that there are global styles for `color schemes`.
162162 useEffect ( ( ) => {
163163 if ( editorEl ) {
164- if ( styles !== '' && editorEl . classList . contains ( 'stk-has-color-schemes' ) === false ) {
165- editorEl . classList . add ( 'stk-has-color-schemes' )
166- addFilter ( 'stackable.global-styles.classnames' , `stackable/global-settings.color-schemes` , classnames => {
167- classnames . push ( 'stk-has-color-schemes' )
168- return classnames
169- } )
170- }
171- if ( styles === '' ) {
172- editorEl . classList . remove ( 'stk-has-color-schemes' )
173- }
164+ const addClassNames = editor => {
165+ const classNamesToAdd = [ ]
166+ const classNamesToRemove = [ ]
167+ if ( styles === '' ) {
168+ editor . classList . remove ( 'stk--has-base-scheme' , 'stk--has-background-scheme' , 'stk--has-container-scheme' )
169+ } else {
170+ if ( ! styles . includes ( ':root' ) ) {
171+ classNamesToRemove . push ( 'stk--has-base-scheme' )
172+ } else if ( editor . classList . contains ( 'stk--has-base-scheme' ) === false ) {
173+ classNamesToAdd . push ( 'stk--has-base-scheme' )
174+ }
175+
176+ if ( ! styles . includes ( '.stk-block-background' ) ) {
177+ classNamesToRemove . push ( 'stk--has-background-scheme' )
178+ } else if ( editor . classList . contains ( 'stk--has-background-scheme' ) === false ) {
179+ classNamesToAdd . push ( 'stk--has-background-scheme' )
180+ }
181+
182+ if ( ! styles . includes ( '.stk-container:where(:not(.stk--no-background))' ) ) {
183+ classNamesToRemove . push ( 'stk--has-container-scheme' )
184+ } else if ( editor . classList . contains ( 'stk--has-container-scheme' ) === false ) {
185+ classNamesToAdd . push ( 'stk--has-container-scheme' )
186+ }
187+
188+ editor . classList . add ( ...classNamesToAdd )
189+ editor . classList . remove ( ...classNamesToRemove )
174190
175- // At first load of the editor, the `stk-has-color-schemes` is removed, so we have to re-add it.
176- const mo = onClassChange ( editorEl , ( ) => {
177- if ( styles !== '' && editorEl ?. classList . contains ( 'stk-has-color-schemes' ) === false ) {
178- editorEl ?. classList . add ( 'stk-has-color-schemes' )
179191 addFilter ( 'stackable.global-styles.classnames' , `stackable/global-settings.color-schemes` , classnames => {
180- classnames . push ( 'stk-has-color-schemes' )
181- return classnames
192+ // Remove any classNamesToRemove from classnames
193+ const updatedClassnames = classnames . filter ( name => ! classNamesToRemove . includes ( name ) )
194+ // Add classNamesToAdd if not already present
195+ classNamesToAdd . forEach ( name => {
196+ if ( ! updatedClassnames . includes ( name ) ) {
197+ updatedClassnames . push ( name )
198+ }
199+ } )
200+ return updatedClassnames
182201 } )
183202 }
184- if ( styles === '' ) {
185- editorEl ?. classList . remove ( 'stk-has-color-schemes' )
186- }
203+ }
204+
205+ addClassNames ( editorEl )
206+
207+ // At first load of the editor, the color scheme classnames removed, so we have to re-add it.
208+ const mo = onClassChange ( editorEl , ( ) => {
209+ addClassNames ( editorEl )
187210 } )
188211
189212 return ( ) => mo . disconnect ( )
0 commit comments