|
@@ -30,7 +30,9 @@
|
|
|
// Interface
|
|
|
let defaultModelId = '';
|
|
|
let showUsername = false;
|
|
|
+
|
|
|
let notificationSound = true;
|
|
|
+ let notificationSoundAlways = false;
|
|
|
|
|
|
let detectArtifacts = true;
|
|
|
|
|
@@ -117,6 +119,11 @@
|
|
|
saveSettings({ notificationSound: notificationSound });
|
|
|
};
|
|
|
|
|
|
+ const toggleNotificationSoundAlways = async () => {
|
|
|
+ notificationSoundAlways = !notificationSoundAlways;
|
|
|
+ saveSettings({ notificationSoundAlways: notificationSoundAlways });
|
|
|
+ };
|
|
|
+
|
|
|
const toggleShowChangelog = async () => {
|
|
|
showChangelog = !showChangelog;
|
|
|
saveSettings({ showChangelog: showChangelog });
|
|
@@ -294,7 +301,8 @@
|
|
|
chatDirection = $settings.chatDirection ?? 'auto';
|
|
|
userLocation = $settings.userLocation ?? false;
|
|
|
|
|
|
- notificationSound = $settings.notificationSound ?? true;
|
|
|
+ notificationSound = $settings?.notificationSound ?? true;
|
|
|
+ notificationSoundAlways = $settings?.notificationSoundAlways ?? false;
|
|
|
|
|
|
hapticFeedback = $settings.hapticFeedback ?? false;
|
|
|
ctrlEnterToSend = $settings.ctrlEnterToSend ?? false;
|
|
@@ -477,6 +485,30 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
+ {#if notificationSound}
|
|
|
+ <div>
|
|
|
+ <div class=" py-0.5 flex w-full justify-between">
|
|
|
+ <div class=" self-center text-xs">
|
|
|
+ {$i18n.t('Always Play Notification Sound')}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <button
|
|
|
+ class="p-1 px-3 text-xs flex rounded-sm transition"
|
|
|
+ on:click={() => {
|
|
|
+ toggleNotificationSoundAlways();
|
|
|
+ }}
|
|
|
+ type="button"
|
|
|
+ >
|
|
|
+ {#if notificationSoundAlways === true}
|
|
|
+ <span class="ml-2 self-center">{$i18n.t('On')}</span>
|
|
|
+ {:else}
|
|
|
+ <span class="ml-2 self-center">{$i18n.t('Off')}</span>
|
|
|
+ {/if}
|
|
|
+ </button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/if}
|
|
|
+
|
|
|
{#if $user?.role === 'admin'}
|
|
|
<div>
|
|
|
<div class=" py-0.5 flex w-full justify-between">
|