|
@@ -37,6 +37,12 @@
|
|
let chatBubble = true;
|
|
let chatBubble = true;
|
|
let chatDirection: 'LTR' | 'RTL' = 'LTR';
|
|
let chatDirection: 'LTR' | 'RTL' = 'LTR';
|
|
|
|
|
|
|
|
+ let imageCompression = false;
|
|
|
|
+ let imageCompressionSize = {
|
|
|
|
+ width: '',
|
|
|
|
+ height: ''
|
|
|
|
+ };
|
|
|
|
+
|
|
// Admin - Show Update Available Toast
|
|
// Admin - Show Update Available Toast
|
|
let showUpdateToast = true;
|
|
let showUpdateToast = true;
|
|
let showChangelog = true;
|
|
let showChangelog = true;
|
|
@@ -95,6 +101,11 @@
|
|
saveSettings({ voiceInterruption: voiceInterruption });
|
|
saveSettings({ voiceInterruption: voiceInterruption });
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ const toggleImageCompression = async () => {
|
|
|
|
+ imageCompression = !imageCompression;
|
|
|
|
+ saveSettings({ imageCompression });
|
|
|
|
+ };
|
|
|
|
+
|
|
const toggleHapticFeedback = async () => {
|
|
const toggleHapticFeedback = async () => {
|
|
hapticFeedback = !hapticFeedback;
|
|
hapticFeedback = !hapticFeedback;
|
|
saveSettings({ hapticFeedback: hapticFeedback });
|
|
saveSettings({ hapticFeedback: hapticFeedback });
|
|
@@ -176,7 +187,8 @@
|
|
|
|
|
|
const updateInterfaceHandler = async () => {
|
|
const updateInterfaceHandler = async () => {
|
|
saveSettings({
|
|
saveSettings({
|
|
- models: [defaultModelId]
|
|
|
|
|
|
+ models: [defaultModelId],
|
|
|
|
+ imageCompressionSize: imageCompressionSize
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
@@ -206,6 +218,9 @@
|
|
|
|
|
|
hapticFeedback = $settings.hapticFeedback ?? false;
|
|
hapticFeedback = $settings.hapticFeedback ?? false;
|
|
|
|
|
|
|
|
+ imageCompression = $settings.imageCompression ?? false;
|
|
|
|
+ imageCompressionSize = $settings.imageCompressionSize ?? { width: '', height: '' };
|
|
|
|
+
|
|
defaultModelId = $settings?.models?.at(0) ?? '';
|
|
defaultModelId = $settings?.models?.at(0) ?? '';
|
|
if ($config?.default_models) {
|
|
if ($config?.default_models) {
|
|
defaultModelId = $config.default_models.split(',')[0];
|
|
defaultModelId = $config.default_models.split(',')[0];
|
|
@@ -662,6 +677,53 @@
|
|
</button>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
+
|
|
|
|
+ <div class=" my-1.5 text-sm font-medium">{$i18n.t('File')}</div>
|
|
|
|
+
|
|
|
|
+ <div>
|
|
|
|
+ <div class=" py-0.5 flex w-full justify-between">
|
|
|
|
+ <div class=" self-center text-xs">{$i18n.t('Image Compression')}</div>
|
|
|
|
+
|
|
|
|
+ <button
|
|
|
|
+ class="p-1 px-3 text-xs flex rounded transition"
|
|
|
|
+ on:click={() => {
|
|
|
|
+ toggleImageCompression();
|
|
|
|
+ }}
|
|
|
|
+ type="button"
|
|
|
|
+ >
|
|
|
|
+ {#if imageCompression === 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 imageCompression}
|
|
|
|
+ <div>
|
|
|
|
+ <div class=" py-0.5 flex w-full justify-between text-xs">
|
|
|
|
+ <div class=" self-center text-xs">{$i18n.t('Image Max Compression Size')}</div>
|
|
|
|
+
|
|
|
|
+ <div>
|
|
|
|
+ <input
|
|
|
|
+ bind:value={imageCompressionSize.width}
|
|
|
|
+ type="number"
|
|
|
|
+ class="w-20 bg-transparent outline-none text-center"
|
|
|
|
+ min="0"
|
|
|
|
+ placeholder="Width"
|
|
|
|
+ />x
|
|
|
|
+ <input
|
|
|
|
+ bind:value={imageCompressionSize.height}
|
|
|
|
+ type="number"
|
|
|
|
+ class="w-20 bg-transparent outline-none text-center"
|
|
|
|
+ min="0"
|
|
|
|
+ placeholder="Height"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ {/if}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|