all(); $parts = []; $default = $grouped[ Responsive_Key_Resolver::BASE_BREAKPOINT ] ?? []; unset( $grouped[ Responsive_Key_Resolver::BASE_BREAKPOINT ] ); $rendered_default = $this->render_state_group( $default ); if ( '' !== $rendered_default ) { $parts[] = $rendered_default; } foreach ( $grouped as $breakpoint => $state_group ) { $rendered = $this->render_state_group( $state_group ); if ( '' === $rendered ) { continue; } $parts[] = sprintf( '@media(--%s) { %s }', $breakpoint, $rendered ); } return implode( ' ', $parts ); } /** * @param array> $state_group */ private function render_state_group( array $state_group ): string { $parts = []; $base = $state_group[''] ?? []; unset( $state_group[''] ); if ( ! empty( $base ) ) { $parts[] = $this->render_declarations( $base ); } foreach ( $state_group as $state => $declarations ) { if ( empty( $declarations ) ) { continue; } $parts[] = sprintf( '&:%s { %s }', $state, $this->render_declarations( $declarations ) ); } return implode( ' ', $parts ); } /** * @param array $declarations */ private function render_declarations( array $declarations ): string { $parts = []; foreach ( $declarations as $property => $value ) { $parts[] = sprintf( '%s: %s;', $property, $value ); } return implode( ' ', $parts ); } }