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