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 {
331 const displayReasoning = messageFormatting(reasoning, '', false, false, messageId, {}, true);331 const displayReasoning = messageFormatting(reasoning, '', false, false, messageId, {}, true);
332 this.messageReasoningContentDom.innerHTML = displayReasoning;332 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
334 // Update the reasoning duration in the UI339 // Update the reasoning duration in the UI
335 this.#updateReasoningTimeUI();340 this.#updateReasoningTimeUI();
336 }341 }
@@ -698,12 +703,9 @@ function setReasoningEventHandlers() {
698 const textarea = messageBlock.find('.reasoning_edit_textarea');703 const textarea = messageBlock.find('.reasoning_edit_textarea');
699 textarea.remove();704 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
706 messageBlock.find('.mes_reasoning_edit_cancel:visible').trigger('click');706 messageBlock.find('.mes_reasoning_edit_cancel:visible').trigger('click');
707
708 updateReasoningUI(messageBlock);
707 });709 });
708710
709 $(document).on('click', '.mes_edit_add_reasoning', async function () {711 $(document).on('click', '.mes_edit_add_reasoning', async function () {
@@ -719,6 +721,12 @@ function setReasoningEventHandlers() {
719721
720 messageBlock.addClass('reasoning');722 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
722 // Open the reasoning area so we can actually edit it730 // Open the reasoning area so we can actually edit it
723 messageBlock.find('.mes_reasoning_details').attr('open', '');731 messageBlock.find('.mes_reasoning_details').attr('open', '');
724 messageBlock.find('.mes_reasoning_edit').trigger('click');732 messageBlock.find('.mes_reasoning_edit').trigger('click');
public/style.css+10 -1
@@ -417,13 +417,22 @@ input[type='checkbox']:focus-visible {
417.mes_reasoning_details:has(.reasoning_edit_textarea) .mes_reasoning_actions .mes_button:not(.edit_button),417.mes_reasoning_details:has(.reasoning_edit_textarea) .mes_reasoning_actions .mes_button:not(.edit_button),
418.mes_reasoning_details:not(:has(.reasoning_edit_textarea)) .mes_reasoning_actions .edit_button,418.mes_reasoning_details:not(:has(.reasoning_edit_textarea)) .mes_reasoning_actions .edit_button,
419.mes_block:has(.edit_textarea):has(.reasoning_edit_textarea) .mes_reasoning_actions,419.mes_block:has(.edit_textarea):has(.reasoning_edit_textarea) .mes_reasoning_actions,
420.mes.reasoning .mes_edit_add_reasoning,420.mes.reasoning:not([data-reasoning-state="hidden"]) .mes_edit_add_reasoning,
421.mes[data-reasoning-state="hidden"] .mes_reasoning_arrow,421.mes[data-reasoning-state="hidden"] .mes_reasoning_arrow,
422.mes[data-reasoning-state="hidden"] .mes_reasoning,422.mes[data-reasoning-state="hidden"] .mes_reasoning,
423.mes[data-reasoning-state="hidden"] .mes_reasoning_copy {423.mes[data-reasoning-state="hidden"] .mes_reasoning_copy {
424 display: none;424 display: none;
425}425}
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
427.mes_reasoning_details .mes_reasoning_arrow {436.mes_reasoning_details .mes_reasoning_arrow {
428 position: absolute;437 position: absolute;
429 top: 50%;438 top: 50%;