Allow editing/adding hidden reasoning blocks - Fix cancel not cancelling correctly - Allow editing/adding of hidden reasoning blocks - Make style and tooltip to show on edit that hidden reasoning is present - Update reasoning UI on edit cancel - to be sure

d9b2311e1779aa7ea1cf0c3bee1576f19bc89ffe

Wolfsblvt <wolfsblvt@gmail.com>

2 files changed, +23 -6Ignore whitespace
public/scripts/reasoning.js+13 -5
@@ -331,6 +331,11 @@ export class ReasoningHandler {
331331 const displayReasoning = messageFormatting(reasoning, '', false, false, messageId, {}, true);
332332 this.messageReasoningContentDom.innerHTML = displayReasoning;
333333
334+ // Update tooltip for hidden reasoning edit
335+ /** @type {HTMLElement} */
336+ const button = this.messageDom.querySelector('.mes_edit_add_reasoning');
337+ button.title = this.state === ReasoningState.Hidden ? t`Hidden reasoning - Add reasoning block` : t`Add reasoning block`;
338+
334339 // Update the reasoning duration in the UI
335340 this.#updateReasoningTimeUI();
336341 }
@@ -698,12 +703,9 @@ function setReasoningEventHandlers() {
698703 const textarea = messageBlock.find('.reasoning_edit_textarea');
699704 textarea.remove();
700705
701- // If we cancel, we might have to remove the reasong class again if this is an unsaved empty reasoning
702- if (!messageBlock.attr('data--reasoning-state')) {
703- messageBlock.removeClass('reasoning');
704- }
705-
706706 messageBlock.find('.mes_reasoning_edit_cancel:visible').trigger('click');
707+
708+ updateReasoningUI(messageBlock);
707709 });
708710
709711 $(document).on('click', '.mes_edit_add_reasoning', async function () {
@@ -719,6 +721,12 @@ function setReasoningEventHandlers() {
719721
720722 messageBlock.addClass('reasoning');
721723
724+ // To make hidden reasoning blocks editable, we just set them to "Done" here already.
725+ // They will be done on save anyway - and on cancel the reasoning block gets rerendered too.
726+ if (messageBlock.attr('data-reasoning-state') === ReasoningState.Hidden) {
727+ messageBlock.attr('data-reasoning-state', ReasoningState.Done);
728+ }
729+
722730 // Open the reasoning area so we can actually edit it
723731 messageBlock.find('.mes_reasoning_details').attr('open', '');
724732 messageBlock.find('.mes_reasoning_edit').trigger('click');
public/style.css+10 -1
@@ -417,13 +417,22 @@ input[type='checkbox']:focus-visible {
417417.mes_reasoning_details:has(.reasoning_edit_textarea) .mes_reasoning_actions .mes_button:not(.edit_button),
418418.mes_reasoning_details:not(:has(.reasoning_edit_textarea)) .mes_reasoning_actions .edit_button,
419419.mes_block:has(.edit_textarea):has(.reasoning_edit_textarea) .mes_reasoning_actions,
420420.mes.reasoning:not([data-reasoning-state="hidden"]) .mes_edit_add_reasoning,
421421.mes[data-reasoning-state="hidden"] .mes_reasoning_arrow,
422422.mes[data-reasoning-state="hidden"] .mes_reasoning,
423423.mes[data-reasoning-state="hidden"] .mes_reasoning_copy {
424424 display: none;
425425}
426426
427+.mes[data-reasoning-state="hidden"] .mes_edit_add_reasoning {
428+ background-color: color-mix(in srgb, var(--SmartThemeQuoteColor) 33%, var(--SmartThemeBlurTintColor) 66%);
429+}
430+
431+/** Hide hidden reasoning blocks - revert this selector to show them again */
432+.mes.reasoning[data-reasoning-state="hidden"] .mes_reasoning_details {
433+ display: none;
434+}
435+
427436.mes_reasoning_details .mes_reasoning_arrow {
428437 position: absolute;
429438 top: 50%;