Alter paragraph fields in closed mode
I think there are two approaches you could take here. In the past I've successfully extended the InlineParagraphsWidget field widget in order to alter the form display for Paragraphs. I think that hook_ajax_render_alter() might also be a good solution.

I have not used hook_ajax_render_alter(), but I have successfully extended InlineParagraphsWidget for the purpose of altering the AJAX response. Specifically, look into overriding the ::addMoreAjax() and ::formElement() methods.

Below is a simplified version of the ::addMoreAjax() callback that I used. Use $insert_element = parent::addMoreAjax($form, $form_state); to get a reference to the triggering element.

public static function addMoreAjax(array $form, FormStateInterface $form_state)
    {
        $insert_element = parent::addMoreAjax($form, $form_state);

        // TODO: This is NOT the cleanest way to find the wrapper ID.
        // Find a cleaner way to get these values.
        $wrapper_id = explode('"', $insert_element['#prefix'])[1];
        $pos = strrpos($wrapper_id, '--');
        $wrapper_id = '#' . substr($wrapper_id, 0, $pos);

        // If you needed the field name.
        $field_name = end($insert_element['#parents']);

        $response = new AjaxResponse();
        $response-&gt;addCommand(new InsertCommand($wrapper_id, $insert_element));
        return $response;
    }


You will probably also want to provide validation by overriding ::elementValidate().

You will also likely need to implement hook_field_widget_info_alter() in order to make your new widget active.

function my_module_field_widget_info_alter(array &amp;$info)
{

    $info['entity_reference_paragraphs']['class'] = MyCustomInlineParagraphsWidget::class;
    $info['entity_reference_paragraphs']['provider'] = 'my_module';
}


Happy coding!