enh: regenerate menu toggle setting

This commit is contained in:
Timothy Jaeryang Baek 2025-08-11 00:43:41 +04:00
parent fbb8c111ed
commit 497471d16b
2 changed files with 103 additions and 36 deletions

View file

@ -1349,51 +1349,95 @@
</Tooltip> </Tooltip>
{/if} {/if}
<button {#if $settings?.regenerateMenu ?? true}
type="button" <button
class="hidden regenerate-response-button" type="button"
on:click={() => { class="hidden regenerate-response-button"
showRateComment = false; on:click={() => {
regenerateResponse(message); showRateComment = false;
regenerateResponse(message);
(model?.actions ?? []).forEach((action) => { (model?.actions ?? []).forEach((action) => {
dispatch('action', { dispatch('action', {
id: action.id, id: action.id,
event: { event: {
id: 'regenerate-response', id: 'regenerate-response',
data: { data: {
messageId: message.id messageId: message.id
}
} }
} });
}); });
}); }}
}} />
/>
<RegenerateMenu <RegenerateMenu
onRegenerate={(prompt = null) => { onRegenerate={(prompt = null) => {
showRateComment = false; showRateComment = false;
regenerateResponse(message, prompt); regenerateResponse(message, prompt);
(model?.actions ?? []).forEach((action) => { (model?.actions ?? []).forEach((action) => {
dispatch('action', { dispatch('action', {
id: action.id, id: action.id,
event: { event: {
id: 'regenerate-response', id: 'regenerate-response',
data: { data: {
messageId: message.id messageId: message.id
}
} }
} });
}); });
}); }}
}} >
> <Tooltip content={$i18n.t('Regenerate')} placement="bottom">
<div
aria-label={$i18n.t('Regenerate')}
class="{isLastMessage
? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition"
>
<svg
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="2.3"
aria-hidden="true"
stroke="currentColor"
class="w-4 h-4"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
/>
</svg>
</div>
</Tooltip>
</RegenerateMenu>
{:else}
<Tooltip content={$i18n.t('Regenerate')} placement="bottom"> <Tooltip content={$i18n.t('Regenerate')} placement="bottom">
<div <button
type="button"
aria-label={$i18n.t('Regenerate')} aria-label={$i18n.t('Regenerate')}
class="{isLastMessage class="{isLastMessage
? 'visible' ? 'visible'
: 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition" : 'invisible group-hover:visible'} p-1.5 hover:bg-black/5 dark:hover:bg-white/5 rounded-lg dark:hover:text-white hover:text-black transition regenerate-response-button"
on:click={() => {
showRateComment = false;
regenerateResponse(message);
(model?.actions ?? []).forEach((action) => {
dispatch('action', {
id: action.id,
event: {
id: 'regenerate-response',
data: {
messageId: message.id
}
}
});
});
}}
> >
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -1410,9 +1454,9 @@
d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99"
/> />
</svg> </svg>
</div> </button>
</Tooltip> </Tooltip>
</RegenerateMenu> {/if}
{#if siblings.length > 1} {#if siblings.length > 1}
<Tooltip content={$i18n.t('Delete')} placement="bottom"> <Tooltip content={$i18n.t('Delete')} placement="bottom">

View file

@ -52,6 +52,8 @@
let keepFollowUpPrompts = false; let keepFollowUpPrompts = false;
let insertFollowUpPrompt = false; let insertFollowUpPrompt = false;
let regenerateMenu = true;
let landingPageMode = ''; let landingPageMode = '';
let chatBubble = true; let chatBubble = true;
let chatDirection: 'LTR' | 'RTL' | 'auto' = 'auto'; let chatDirection: 'LTR' | 'RTL' | 'auto' = 'auto';
@ -200,6 +202,8 @@
keepFollowUpPrompts = $settings?.keepFollowUpPrompts ?? false; keepFollowUpPrompts = $settings?.keepFollowUpPrompts ?? false;
insertFollowUpPrompt = $settings?.insertFollowUpPrompt ?? false; insertFollowUpPrompt = $settings?.insertFollowUpPrompt ?? false;
regenerateMenu = $settings?.regenerateMenu ?? true;
largeTextAsFile = $settings?.largeTextAsFile ?? false; largeTextAsFile = $settings?.largeTextAsFile ?? false;
copyFormatted = $settings?.copyFormatted ?? false; copyFormatted = $settings?.copyFormatted ?? false;
@ -709,6 +713,25 @@
</div> </div>
</div> </div>
<div>
<div class=" py-0.5 flex w-full justify-between">
<div id="regenerate-menu-label" class=" self-center text-xs">
{$i18n.t('Regenerate Menu')}
</div>
<div class="flex items-center gap-2 p-1">
<Switch
ariaLabelledbyId="regenerate-menu-label"
tooltip={true}
bind:state={regenerateMenu}
on:change={() => {
saveSettings({ regenerateMenu });
}}
/>
</div>
</div>
</div>
<div> <div>
<div class=" py-0.5 flex w-full justify-between"> <div class=" py-0.5 flex w-full justify-between">
<div id="always-collapse-label" class=" self-center text-xs"> <div id="always-collapse-label" class=" self-center text-xs">