fix: persist config after every change

This commit is contained in:
2025-08-14 14:38:14 -06:00
parent 22d10902fb
commit 8481a897dc
4 changed files with 124 additions and 115 deletions

2
dist/index.css vendored
View File

@@ -1 +1 @@
.details{border:1px solid var(--color-neutral-6);background-color:var(--color-neutral-3);color:var(--color-neutral-12);border-radius:4px}.details[open] summary{background-color:var(--color-neutral-5)}.details>summary{cursor:pointer;padding:4px 8px;font-size:16px;font-weight:600;line-height:20px}.details>summary:hover{background-color:var(--color-neutral-4)}.details>div{padding:8px}:root{--color-neutral-1:#111113;--color-neutral-2:#18191b;--color-neutral-3:#212225;--color-neutral-4:#272a2d;--color-neutral-5:#2e3135;--color-neutral-6:#363a3f;--color-neutral-7:#43484e;--color-neutral-8:#5a6169;--color-neutral-9:#696e77;--color-neutral-10:#777b84;--color-neutral-11:#b0b4ba;--color-neutral-12:#edeef0;--color-primary-1:#13131e;--color-primary-2:#171625;--color-primary-3:#202248;--color-primary-4:#262a65;--color-primary-5:#303374;--color-primary-6:#3d3e82;--color-primary-7:#4a4a95;--color-primary-8:#5958b1;--color-primary-9:#5b5bd6;--color-primary-10:#6e6ade;--color-primary-11:#b1a9ff;--color-primary-12:#e0dffe}
.st-rnd-details{border:1px solid var(--color-neutral-6);background-color:var(--color-neutral-3);color:var(--color-neutral-12);border-radius:4px}.st-rnd-details[open] summary{background-color:var(--color-neutral-5)}.st-rnd-details>summary{cursor:pointer;padding:4px 8px;font-size:16px;font-weight:600;line-height:20px}.st-rnd-details>summary:hover{background-color:var(--color-neutral-4)}.st-rnd-details>div{padding:8px}.st-rnd-button{--btn-background-color:var(--color-primary-3);--btn-background-color-hover:var(--color-primary-4);--btn-background-color-active:var(--color-primary-5);--btn-border-color:var(--color-primary-6);--btn-color:var(--color-primary-12)}.st-rnd-button.button-neutral{--btn-background-color:var(--color-neutral-3);--btn-background-color-hover:var(--color-neutral-4);--btn-background-color-active:var(--color-neutral-5);--btn-border-color:var(--color-neutral-6);--btn-color:var(--color-neutral-12)}.st-rnd-button{display:inline-block;border:1px solid var(--btn-border-color);background-color:var(--btn-background-color);color:var(--btn-color);text-align:center;cursor:pointer;border-radius:4px;padding:4px 8px;font-weight:600}.st-rnd-button:hover{background-color:var(--btn-background-color-hover)}.st-rnd-button:active{background-color:var(--btn-background-color-active)}.st-rnd-button:disabled{background-color:color-mix(in srgb,var(--color-neutral-1)60%,var(--btn-background-color)40%);border-color:color-mix(in srgb,var(--color-neutral-1)60%,var(--btn-border-color)40%);color:color-mix(in srgb,var(--color-neutral-1)60%,var(--btn-color)40%);cursor:not-allowed}.st-rnd-button:disabled:hover{background-color:color-mix(in srgb,var(--color-neutral-1)60%,var(--btn-background-color)40%);border-color:color-mix(in srgb,var(--color-neutral-1)60%,var(--btn-border-color)40%);color:color-mix(in srgb,var(--color-neutral-1)60%,var(--btn-color)40%)}.st-rnd-button.button-icon{aspect-ratio:1;width:auto;height:auto;padding:4px;font-size:.8em}#st-rnd-upload-wordlist-container{display:flex;flex-direction:column}#st-rnd-wordlist-controls{display:flex;flex-direction:row;gap:8px}#st-rnd-wordlist-controls>select{flex-grow:1}#st-rnd-wordlist-controls>button{flex-shrink:0}.st-rnd-small-text{color:var(--color-neutral-11);font-size:.8em}.st-rnd-dialog{border:1px solid var(--color-neutral-6);background-color:var(--color-neutral-1);color:var(--color-neutral-12);border-radius:4px;padding:8px}.st-rnd-dialog::backdrop{background-color:color-mix(in srgb,var(--color-neutral-2)80%,transparent 20%)}#st-rnd-wordlist-edit-dialog{position:relative;width:clamp(400px,100%,1200px)}#st-rnd-wordlist-edit-dialog>div{display:flex;flex-direction:column;gap:8px}#st-rnd-wordlist-edit-dialog #st-rnd-wordlist-edit-dialog-title{text-align:center;width:100%}#st-rnd-wordlist-edit-dialog #st-rnd-wordlist-edit-dialog-title>span{color:var(--color-primary-9)}#st-rnd-wordlist-edit-dialog #st-rnd-wordlist-actions{display:flex;justify-content:flex-end;gap:8px}.st-rnd-input{display:block;border:1px solid var(--color-neutral-6);background-color:var(--color-neutral-3);color:var(--color-neutral-12);border-radius:4px;width:100%;padding:4px 8px}.st-rnd-textarea{display:block;border:1px solid var(--color-neutral-6);background-color:var(--color-neutral-3);color:var(--color-neutral-12);border-radius:4px;width:100%;padding:4px 8px}.st-rnd-select{border:1px solid var(--color-neutral-6);background-color:var(--color-neutral-3);color:var(--color-neutral-12);border-radius:4px;padding:4px 8px}.st-rnd-select:active{background-color:var(--color-neutral-12)}.st-rnd-select:disabled{background-color:color-mix(in srgb,var(--color-neutral-1)60%,var(--color-neutral-3)40%);color:color-mix(in srgb,var(--color-neutral-1)60%,var(--color-neutral-12)40%);cursor:not-allowed}.st-rnd-select:disabled:active{background-color:color-mix(in srgb,var(--color-neutral-1)60%,var(--color-neutral-3)40%);color:color-mix(in srgb,var(--color-neutral-1)60%,var(--color-neutral-12)40%)}:root{--color-neutral-1:#111113;--color-neutral-2:#18191b;--color-neutral-3:#212225;--color-neutral-4:#272a2d;--color-neutral-5:#2e3135;--color-neutral-6:#363a3f;--color-neutral-7:#43484e;--color-neutral-8:#5a6169;--color-neutral-9:#696e77;--color-neutral-10:#777b84;--color-neutral-11:#b0b4ba;--color-neutral-12:#edeef0;--color-primary-1:#13131e;--color-primary-2:#171625;--color-primary-3:#202248;--color-primary-4:#262a65;--color-primary-5:#303374;--color-primary-6:#3d3e82;--color-primary-7:#4a4a95;--color-primary-8:#5958b1;--color-primary-9:#5b5bd6;--color-primary-10:#6e6ade;--color-primary-11:#b1a9ff;--color-primary-12:#e0dffe}

210
dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,13 +1,16 @@
import type { StateCreator } from 'zustand'
import { MODULE_NAME } from '@/constants'
export type WordList = string[]
export type WordLists = Record<string, string[]>
export interface Config {
wordLists: Record<string, string[]>
wordLists: WordLists
}
export interface ConfigSlice extends Config {
addWordList: (name: string, words: string[]) => void
updateWordList: (name: string, words: string[]) => void
removeWordList: (name: string) => void
}
@@ -16,17 +19,18 @@ export const createConfigSlice: StateCreator<ConfigSlice> = (set) => {
// biome-ignore lint/suspicious/noExplicitAny: SillyTavern's extensionSettings is not properly typed
const extensionSettings: Record<string, any> = context.extensionSettings
const settings: Config =
extensionSettings[MODULE_NAME] === undefined
? { wordLists: {} }
: extensionSettings[MODULE_NAME]
if (extensionSettings[MODULE_NAME] === undefined) {
extensionSettings[MODULE_NAME] = {
wordLists: {}
}
}
const settings = extensionSettings[MODULE_NAME]
return {
wordLists: settings.wordLists,
addWordList: (name, words) =>
set({ wordLists: { ...settings.wordLists, [name]: words } }),
updateWordList: (name, words) =>
set({ wordLists: { ...settings.wordLists, [name]: words } }),
removeWordList: (name) => {
const newWordLists = { ...settings.wordLists }
delete newWordLists[name]

View File

@@ -1,9 +1,9 @@
import { createStore } from 'zustand'
import { create } from 'zustand'
import { subscribeWithSelector } from 'zustand/middleware'
import { MODULE_NAME } from '@/constants'
import { type ConfigSlice, createConfigSlice } from '@/store/configSlice'
export const useStore = createStore<ConfigSlice>()(
export const useStore = create<ConfigSlice>()(
subscribeWithSelector(createConfigSlice)
)
@@ -13,6 +13,7 @@ useStore.subscribe(
const context = SillyTavern.getContext()
// biome-ignore lint/suspicious/noExplicitAny: SillyTavern's extensionSettings is not properly typed
const extensionSettings: Record<string, any> = context.extensionSettings
extensionSettings[MODULE_NAME] = { wordLists }
extensionSettings[MODULE_NAME].wordLists = wordLists
context.saveSettingsDebounced()
}
)