Migrate to svelte 5

This commit is contained in:
kwaroran
2024-10-23 02:31:37 +09:00
parent e434c7ab96
commit c7330719ad
120 changed files with 2398 additions and 2033 deletions

View File

@@ -1,8 +1,10 @@
<script lang="ts">
import { run } from 'svelte/legacy';
import Suggestion from './Suggestion.svelte';
import AdvancedChatEditor from './AdvancedChatEditor.svelte';
import { CameraIcon, DatabaseIcon, DicesIcon, GlobeIcon, ImagePlusIcon, LanguagesIcon, Laugh, MenuIcon, MicOffIcon, PackageIcon, Plus, RefreshCcwIcon, ReplyIcon, Send, StepForwardIcon } from "lucide-svelte";
import { CurrentCharacter, CurrentChat, CurrentUsername, selectedCharID, CurrentUserIcon, CurrentShowMemoryLimit,CurrentSimpleCharacter, PlaygroundStore, UserIconProtrait } from "../../ts/stores";
import { selectedCharID, CurrentShowMemoryLimit, PlaygroundStore, UserIconProtrait, createSimpleCharacter } from "../../ts/stores";
import Chat from "./Chat.svelte";
import { DataBase, type Message, type character, type groupChat } from "../../ts/storage/database";
import { getCharImage } from "../../ts/characters";
@@ -27,20 +29,18 @@
import PlaygroundMenu from '../Playground/PlaygroundMenu.svelte';
import { ConnectionOpenStore } from 'src/ts/sync/multiuser';
let messageInput:string = ''
let messageInputTranslate:string = ''
let openMenu = false
let loadPages = 30
let autoMode = false
let messageInput:string = $state('')
let messageInputTranslate:string = $state('')
let openMenu = $state(false)
let loadPages = $state(30)
let autoMode = $state(false)
let rerolls:Message[][] = []
let rerollid = -1
let lastCharId = -1
let doingChatInputTranslate = false
let currentCharacter:character|groupChat = $CurrentCharacter
let toggleStickers:boolean = false
let fileInput:string[] = []
export let openModuleList = false
export let openChatList:boolean = false
let currentCharacter:character|groupChat = $state($DataBase.characters[$selectedCharID])
let toggleStickers:boolean = $state(false)
let fileInput:string[] = $state([])
async function send(){
return sendMain(false)
@@ -83,7 +83,7 @@
cha.push({
role: 'user',
data: '*says nothing*',
name: $ConnectionOpenStore ? $CurrentUsername : null
name: $ConnectionOpenStore ? $DataBase.username : null
})
}
}
@@ -101,7 +101,7 @@
role: 'user',
data: await processScript(char,messageInput,'editinput'),
time: Date.now(),
name: $ConnectionOpenStore ? $CurrentUsername : null
name: $ConnectionOpenStore ? $DataBase.username : null
})
}
else{
@@ -109,7 +109,7 @@
role: 'user',
data: messageInput,
time: Date.now(),
name: $ConnectionOpenStore ? $CurrentUsername : null
name: $ConnectionOpenStore ? $DataBase.username : null
})
}
}
@@ -131,11 +131,11 @@
rerolls = []
rerollid = -1
}
const genId = $CurrentChat.message.at(-1)?.generationInfo?.generationId
const genId = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.at(-1)?.generationInfo?.generationId
if(genId){
const r = Prereroll(genId)
if(r){
$CurrentChat.message[$CurrentChat.message.length - 1].data = r
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].data = r
return
}
}
@@ -144,20 +144,20 @@
let db = $DataBase
rerollid += 1
let rerollData = structuredClone(rerolls[rerollid])
let msgs = db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message
let msgs = db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
for(let i = 0; i < rerollData.length; i++){
msgs[msgs.length - rerollData.length + i] = rerollData[i]
}
db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message = msgs
db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msgs
$DataBase = db
}
return
}
if(rerolls.length === 0){
rerolls.push(structuredClone([$CurrentChat.message.at(-1)]))
rerolls.push(structuredClone([$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.at(-1)]))
rerollid = rerolls.length - 1
}
let cha = structuredClone($CurrentChat.message)
let cha = structuredClone($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message)
if(cha.length === 0 ){
return
}
@@ -176,7 +176,7 @@
return
}
}
$CurrentChat.message = cha
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = cha
await sendChatMain()
}
@@ -188,11 +188,11 @@
rerolls = []
rerollid = -1
}
const genId = $CurrentChat.message.at(-1)?.generationInfo?.generationId
const genId = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.at(-1)?.generationInfo?.generationId
if(genId){
const r = PreUnreroll(genId)
if(r){
$CurrentChat.message[$CurrentChat.message.length - 1].data = r
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].data = r
return
}
}
@@ -203,11 +203,11 @@
let db = $DataBase
rerollid -= 1
let rerollData = structuredClone(rerolls[rerollid])
let msgs = db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message
let msgs = db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message
for(let i = 0; i < rerollData.length; i++){
msgs[msgs.length - rerollData.length + i] = rerollData[i]
}
db.characters[$selectedCharID].chats[$CurrentCharacter.chatPage].message = msgs
db.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message = msgs
$DataBase = db
}
}
@@ -216,7 +216,7 @@
async function sendChatMain(continued:boolean = false) {
let previousLength = $CurrentChat.message.length
let previousLength = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length
messageInput = ''
abortController = new AbortController()
try {
@@ -224,8 +224,8 @@
signal:abortController.signal,
continue:continued
})
if(previousLength < $CurrentChat.message.length){
rerolls.push(structuredClone($CurrentChat.message).slice(previousLength))
if(previousLength < $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length){
rerolls.push(structuredClone($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message).slice(previousLength))
rerollid = rerolls.length - 1
}
} catch (error) {
@@ -261,11 +261,17 @@
}
}
export let customStyle = ''
let inputHeight = "44px"
let inputEle:HTMLTextAreaElement
let inputTranslateHeight = "44px"
let inputTranslateEle:HTMLTextAreaElement
interface Props {
openModuleList?: boolean;
openChatList?: boolean;
customStyle?: string;
}
let { openModuleList = $bindable(false), openChatList = $bindable(false), customStyle = '' }: Props = $props();
let inputHeight = $state("44px")
let inputEle:HTMLTextAreaElement = $state()
let inputTranslateHeight = $state("44px")
let inputTranslateEle:HTMLTextAreaElement = $state()
function updateInputSizeAll() {
updateInputSize()
@@ -287,7 +293,9 @@
}
}
$: updateInputSizeAll()
run(() => {
updateInputSizeAll()
});
async function updateInputTransateMessage(reverse: boolean) {
if(isExpTranslator()){
@@ -388,13 +396,13 @@
}
}
$: {
currentCharacter = $CurrentCharacter
}
run(() => {
currentCharacter = $DataBase.characters[$selectedCharID]
});
</script>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div class="w-full h-full" style={customStyle} on:click={() => {
<!-- svelte-ignore a11y_click_events_have_key_events -->
<!-- svelte-ignore a11y_no_static_element_interactions -->
<div class="w-full h-full" style={customStyle} onclick={() => {
openMenu = false
}}>
{#if $selectedCharID < 0}
@@ -404,16 +412,16 @@
<PlaygroundMenu />
{/if}
{:else}
<div class="h-full w-full flex flex-col-reverse overflow-y-auto relative default-chat-screen" on:scroll={(e) => {
<div class="h-full w-full flex flex-col-reverse overflow-y-auto relative default-chat-screen" onscroll={(e) => {
//@ts-ignore
const scrolled = (e.target.scrollHeight - e.target.clientHeight + e.target.scrollTop)
if(scrolled < 100 && $CurrentChat.message.length > loadPages){
if(scrolled < 100 && $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length > loadPages){
loadPages += 15
}
}}>
<div class="flex items-stretch mt-2 mb-2 w-full">
{#if $DataBase.useChatSticker && currentCharacter.type !== 'group'}
<div on:click={()=>{toggleStickers = !toggleStickers}}
<div onclick={()=>{toggleStickers = !toggleStickers}}
class={"ml-4 bg-textcolor2 flex justify-center items-center w-12 h-12 rounded-md hover:bg-green-500 transition-colors "+(toggleStickers ? 'text-green-500':'text-textcolor')}>
<Laugh/>
</div>
@@ -423,7 +431,7 @@
<textarea class="peer focus:border-textcolor transition-colors outline-none text-textcolor p-2 min-w-0 border border-r-0 bg-transparent rounded-md rounded-r-none input-text text-xl flex-grow ml-4 border-darkborderc resize-none overflow-y-hidden overflow-x-hidden max-w-full"
bind:value={messageInput}
bind:this={inputEle}
on:keydown={(e) => {
onkeydown={(e) => {
if(e.key.toLocaleLowerCase() === "enter" && (!e.shiftKey) && !e.isComposing){
if($DataBase.sendWithEnter){
send()
@@ -435,37 +443,36 @@
e.preventDefault()
}
}}
on:input={()=>{updateInputSizeAll();updateInputTransateMessage(false)}}
oninput={()=>{updateInputSizeAll();updateInputTransateMessage(false)}}
style:height={inputHeight}
/>
></textarea>
{:else}
<AdvancedChatEditor
bind:value={messageInput}
bind:translate={messageInputTranslate}
on:change={(e) => { updateInputTransateMessage(e.detail.translate);}}
/>
{/if}
{#if $doingChat || doingChatInputTranslate}
<button
class="peer-focus:border-textcolor flex justify-center border-y border-darkborderc items-center text-gray-100 p-3 hover:bg-blue-500 transition-colors" on:click={abortChat}
class="peer-focus:border-textcolor flex justify-center border-y border-darkborderc items-center text-gray-100 p-3 hover:bg-blue-500 transition-colors" onclick={abortChat}
style:height={inputHeight}
>
<div class="loadmove chat-process-stage-{$chatProcessStage}" class:autoload={autoMode} />
<div class="loadmove chat-process-stage-{$chatProcessStage}" class:autoload={autoMode}></div>
</button>
{:else}
<button
on:click={send}
onclick={send}
class="flex justify-center border-y border-darkborderc items-center text-gray-100 p-3 peer-focus:border-textcolor hover:bg-blue-500 transition-colors"
style:height={inputHeight}
>
<Send />
</button>
{/if}
{#if $CurrentCharacter?.chaId !== '§playground'}
{#if $DataBase.characters[$selectedCharID]?.chaId !== '§playground'}
<button
on:click={(e) => {
onclick={(e) => {
openMenu = !openMenu
e.stopPropagation()
}}
@@ -475,12 +482,12 @@
<MenuIcon />
</button>
{:else}
<div on:click={(e) => {
$CurrentChat.message.push({
<div onclick={(e) => {
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.push({
role: 'char',
data: ''
})
$CurrentChat = $CurrentChat
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
}}
class="peer-focus:border-textcolor mr-2 flex border-y border-r border-darkborderc justify-center items-center text-gray-100 p-3 rounded-r-md hover:bg-blue-500 transition-colors"
style:height={inputHeight}
@@ -489,7 +496,7 @@
</div>
{/if}
</div>
{#if $DataBase.useAutoTranslateInput && !$DataBase.useAdvancedEditor && $CurrentCharacter?.chaId !== '§playground'}
{#if $DataBase.useAutoTranslateInput && !$DataBase.useAdvancedEditor && $DataBase.characters[$selectedCharID]?.chaId !== '§playground'}
<div class="flex items-center mt-2 mb-2">
<label for='messageInputTranslate' class="text-textcolor ml-4">
<LanguagesIcon />
@@ -497,7 +504,7 @@
<textarea id = 'messageInputTranslate' class="text-textcolor rounded-md p-2 min-w-0 bg-transparent input-text text-xl flex-grow ml-4 mr-2 border-darkbutton resize-none focus:bg-selected overflow-y-hidden overflow-x-hidden max-w-full"
bind:value={messageInputTranslate}
bind:this={inputTranslateEle}
on:keydown={(e) => {
onkeydown={(e) => {
if(e.key.toLocaleLowerCase() === "enter" && (!e.shiftKey)){
if($DataBase.sendWithEnter){
send()
@@ -509,10 +516,10 @@
e.preventDefault()
}
}}
on:input={()=>{updateInputSizeAll();updateInputTransateMessage(true)}}
oninput={()=>{updateInputSizeAll();updateInputTransateMessage(true)}}
placeholder={language.enterMessageForTranslateToEnglish}
style:height={inputTranslateHeight}
/>
></textarea>
</div>
{/if}
@@ -552,20 +559,20 @@
)} {send}/>
{/if}
{#each messageForm($CurrentChat.message, loadPages) as chat, i}
{#each messageForm($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message, loadPages) as chat, i}
{#if chat.role === 'char'}
{#if $CurrentCharacter.type !== 'group'}
{#if $DataBase.characters[$selectedCharID].type !== 'group'}
<Chat
idx={chat.index}
name={$CurrentCharacter.name}
name={$DataBase.characters[$selectedCharID].name}
message={chat.data}
img={getCharImage($CurrentCharacter.image, 'css')}
img={getCharImage($DataBase.characters[$selectedCharID].image, 'css')}
rerollIcon={i === 0}
onReroll={reroll}
unReroll={unReroll}
isLastMemory={$CurrentChat.lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
character={$CurrentSimpleCharacter}
largePortrait={$CurrentCharacter.largePortrait}
isLastMemory={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
character={createSimpleCharacter($DataBase.characters[$selectedCharID])}
largePortrait={$DataBase.characters[$selectedCharID].largePortrait}
messageGenerationInfo={chat.generationInfo}
/>
{:else}
@@ -577,7 +584,7 @@
onReroll={reroll}
unReroll={unReroll}
img={getCharImage(findCharacterbyId(chat.saying).image, 'css')}
isLastMemory={$CurrentChat.lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
isLastMemory={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
character={chat.saying}
largePortrait={findCharacterbyId(chat.saying).largePortrait}
messageGenerationInfo={chat.generationInfo}
@@ -585,32 +592,32 @@
{/if}
{:else}
<Chat
character={$CurrentSimpleCharacter}
character={createSimpleCharacter($DataBase.characters[$selectedCharID])}
idx={chat.index}
name={chat.name ?? $CurrentUsername}
name={chat.name ?? $DataBase.username}
message={chat.data}
img={$ConnectionOpenStore ? '' : getCharImage($CurrentUserIcon, 'css')}
isLastMemory={$CurrentChat.lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
img={$ConnectionOpenStore ? '' : getCharImage($DataBase.userIcon, 'css')}
isLastMemory={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].lastMemory === (chat.chatId ?? 'none') && $CurrentShowMemoryLimit}
largePortrait={$UserIconProtrait}
messageGenerationInfo={chat.generationInfo}
/>
{/if}
{/each}
{#if $CurrentChat.message.length <= loadPages}
{#if $CurrentCharacter.type !== 'group' }
{#if $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length <= loadPages}
{#if $DataBase.characters[$selectedCharID].type !== 'group' }
<Chat
character={$CurrentSimpleCharacter}
name={$CurrentCharacter.name}
message={$CurrentChat.fmIndex === -1 ? $CurrentCharacter.firstMessage :
$CurrentCharacter.alternateGreetings[$CurrentChat.fmIndex]}
img={getCharImage($CurrentCharacter.image, 'css')}
character={createSimpleCharacter($DataBase.characters[$selectedCharID])}
name={$DataBase.characters[$selectedCharID].name}
message={$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].fmIndex === -1 ? $DataBase.characters[$selectedCharID].firstMessage :
$DataBase.characters[$selectedCharID].alternateGreetings[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].fmIndex]}
img={getCharImage($DataBase.characters[$selectedCharID].image, 'css')}
idx={-1}
altGreeting={$CurrentCharacter.alternateGreetings.length > 0}
largePortrait={$CurrentCharacter.largePortrait}
altGreeting={$DataBase.characters[$selectedCharID].alternateGreetings.length > 0}
largePortrait={$DataBase.characters[$selectedCharID].largePortrait}
firstMessage={true}
onReroll={() => {
const cha = $CurrentCharacter
const chat = $CurrentChat
const cha = $DataBase.characters[$selectedCharID]
const chat = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
if(cha.type !== 'group'){
if (chat.fmIndex >= (cha.alternateGreetings.length - 1)){
chat.fmIndex = -1
@@ -619,11 +626,11 @@
chat.fmIndex += 1
}
}
$CurrentChat = chat
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = chat
}}
unReroll={() => {
const cha = $CurrentCharacter
const chat = $CurrentChat
const cha = $DataBase.characters[$selectedCharID]
const chat = $DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage]
if(cha.type !== 'group'){
if (chat.fmIndex === -1){
chat.fmIndex = (cha.alternateGreetings.length - 1)
@@ -632,38 +639,38 @@
chat.fmIndex -= 1
}
}
$CurrentChat = chat
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage] = chat
}}
isLastMemory={false}
/>
{#if !$CurrentCharacter.removedQuotes && $CurrentCharacter.creatorNotes.length >= 2}
<CreatorQuote quote={$CurrentCharacter.creatorNotes} onRemove={() => {
const cha = $CurrentCharacter
{#if !$DataBase.characters[$selectedCharID].removedQuotes && $DataBase.characters[$selectedCharID].creatorNotes.length >= 2}
<CreatorQuote quote={$DataBase.characters[$selectedCharID].creatorNotes} onRemove={() => {
const cha = $DataBase.characters[$selectedCharID]
if(cha.type !== 'group'){
cha.removedQuotes = true
}
$CurrentCharacter = cha
$DataBase.characters[$selectedCharID] = cha
}} />
{/if}
{/if}
{/if}
{#if openMenu}
<div class="absolute right-2 bottom-16 p-5 bg-darkbg flex flex-col gap-3 text-textcolor rounded-md" on:click={(e) => {
<div class="absolute right-2 bottom-16 p-5 bg-darkbg flex flex-col gap-3 text-textcolor rounded-md" onclick={(e) => {
e.stopPropagation()
}}>
{#if $CurrentCharacter.type === 'group'}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={runAutoMode}>
{#if $DataBase.characters[$selectedCharID].type === 'group'}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={runAutoMode}>
<DicesIcon />
<span class="ml-2">{language.autoMode}</span>
</div>
{/if}
<!-- svelte-ignore empty-block -->
{#if $CurrentCharacter.ttsMode === 'webspeech' || $CurrentCharacter.ttsMode === 'elevenlab'}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={() => {
<!-- svelte-ignore block_empty -->
{#if $DataBase.characters[$selectedCharID].ttsMode === 'webspeech' || $DataBase.characters[$selectedCharID].ttsMode === 'elevenlab'}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
stopTTS()
}}>
<MicOffIcon />
@@ -672,9 +679,9 @@
{/if}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors"
class:text-textcolor2={($CurrentChat.message.length < 2) || ($CurrentChat.message[$CurrentChat.message.length - 1].role !== 'char')}
on:click={() => {
if(($CurrentChat.message.length < 2) || ($CurrentChat.message[$CurrentChat.message.length - 1].role !== 'char')){
class:text-textcolor2={($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length < 2) || ($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].role !== 'char')}
onclick={() => {
if(($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length < 2) || ($DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message[$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].message.length - 1].role !== 'char')){
return
}
sendContinue();
@@ -686,7 +693,7 @@
{#if $DataBase.showMenuChatList}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={() => {
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
openChatList = true
openMenu = false
}}>
@@ -696,7 +703,7 @@
{/if}
{#if $DataBase.translator !== ''}
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoTranslateInput ? 'text-green-500':'lg:hover:text-green-500')} on:click={() => {
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoTranslateInput ? 'text-green-500':'lg:hover:text-green-500')} onclick={() => {
$DataBase.useAutoTranslateInput = !$DataBase.useAutoTranslateInput
}}>
<GlobeIcon />
@@ -705,14 +712,14 @@
{/if}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={() => {
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
screenShot()
}}>
<CameraIcon />
<span class="ml-2">{language.screenshot}</span>
</div>
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={async () => {
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={async () => {
const res = await postChatFile(messageInput)
if(res?.type === 'image'){
fileInput.push(res.data)
@@ -728,7 +735,7 @@
</div>
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoSuggestions ? 'text-green-500':'lg:hover:text-green-500')} on:click={async () => {
<div class={"flex items-center cursor-pointer "+ ($DataBase.useAutoSuggestions ? 'text-green-500':'lg:hover:text-green-500')} onclick={async () => {
$DataBase.useAutoSuggestions = !$DataBase.useAutoSuggestions
}}>
<ReplyIcon />
@@ -736,8 +743,8 @@
</div>
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={() => {
$CurrentChat.modules ??= []
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={() => {
$DataBase.characters[$selectedCharID].chats[$DataBase.characters[$selectedCharID].chatPage].modules ??= []
openModuleList = true
openMenu = false
}}>
@@ -746,7 +753,7 @@
</div>
{#if $DataBase.sideMenuRerollButton}
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" on:click={reroll}>
<div class="flex items-center cursor-pointer hover:text-green-500 transition-colors" onclick={reroll}>
<RefreshCcwIcon />
<span class="ml-2">{language.reroll}</span>
</div>