fix: persist config after every change
This commit is contained in:
2
dist/index.css
vendored
2
dist/index.css
vendored
@@ -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
210
dist/index.js
vendored
File diff suppressed because one or more lines are too long
@@ -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]
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user