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 | 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; |
| 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 | // Update the reasoning duration in the UI | 339 | // 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(); |
| 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 | 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 | }); |
| 708 | 710 | ||
| 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() { | |||
| 719 | 721 | ||
| 720 | messageBlock.addClass('reasoning'); | 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 | // Open the reasoning area so we can actually edit it | 730 | // 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'); |
| @@ -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 | } |
| 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 | .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%; |