From ab485543b83cb36954e96cd0d79cf8d22442fbd4 Mon Sep 17 00:00:00 2001 From: enzi221 Date: Mon, 19 May 2025 02:05:11 +0900 Subject: [PATCH 1/5] feat: Add 'divider' type toggle --- src/lib/SideBars/Toggles.svelte | 13 +++++++++++- src/ts/util.ts | 37 +++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/lib/SideBars/Toggles.svelte b/src/lib/SideBars/Toggles.svelte index afefa2bd..c7b99d04 100644 --- a/src/lib/SideBars/Toggles.svelte +++ b/src/lib/SideBars/Toggles.svelte @@ -21,7 +21,7 @@ {#snippet toggles(reverse: boolean = false)} - {#each parsedKv as toggle} + {#each parsedKv as toggle, index} {#if toggle.type === 'select'}
{toggle.value} @@ -37,6 +37,17 @@ {toggle.value}
+ {:else if toggle.type === 'divider'} + {@const prevToggle = parsedKv[index - 1]} + + {#if index === 0 || prevToggle.type !== 'divider' || prevToggle.value !== toggle.value} +
+ {#if toggle.value} + {toggle.value} + {/if} +
+
+ {/if} {:else}
{ diff --git a/src/ts/util.ts b/src/ts/util.ts index c80360a2..3b12e5c6 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -1009,33 +1009,48 @@ export function parseKeyValue(template:string){ } } +type sidebarToggle = + | { + key?:string, + value?:string, + type:'divider', + options?:string[] + } + | { + key:string, + value:string, + type:'select', + options:string[] + } + | { + key:string, + value:string, + type:string|undefined, + options?:string[] + } + export function parseToggleSyntax(template:string){ try { - console.log(template) if(!template){ return [] } - const keyValue:{ - key:string, - value:string, - type?:string, - options?:string[] - }[] = [] + const keyValue:sidebarToggle[] = [] const splited = template.split('\n') for(const line of splited){ const [key, value, type, option] = line.split('=') - if(key && value){ + if((key && value) || type === 'divider'){ keyValue.push({ - key, value, type, options: option ? option.split(',') : [] + key, + value, + type, + options: option?.split(',') ?? [] }) } } - console.log(keyValue) - return keyValue } catch (error) { console.error(error) From 3f68238c9a7a4609fa0c86545af4bf04b145c034 Mon Sep 17 00:00:00 2001 From: enzi221 Date: Tue, 20 May 2025 01:11:21 +0900 Subject: [PATCH 2/5] feat: Add 'group' and 'groupEnd' type toggle --- src/lib/SideBars/Toggles.svelte | 45 +++++++++++++++++++++++++-------- src/ts/util.ts | 29 ++++++++++++++++++--- 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/src/lib/SideBars/Toggles.svelte b/src/lib/SideBars/Toggles.svelte index c7b99d04..0cf2525e 100644 --- a/src/lib/SideBars/Toggles.svelte +++ b/src/lib/SideBars/Toggles.svelte @@ -1,10 +1,10 @@ -{#snippet toggles(reverse: boolean = false)} - {#each parsedKv as toggle, index} - {#if toggle.type === 'select'} +{#snippet toggles(items: sidebarToggle[], reverse: boolean = false)} + {#each items as toggle, index} + {#if toggle.type === 'group' && toggle.children.length > 0} +
+ {toggle.value} +
+ {@render toggles((toggle as sidebarToggleGroup).children, reverse)} +
+
+ {:else if toggle.type === 'select'}
{toggle.value} - {#each toggle.options as option, i} {option} @@ -38,7 +61,7 @@
{:else if toggle.type === 'divider'} - {@const prevToggle = parsedKv[index - 1]} + {@const prevToggle = groupedToggles[index - 1]} {#if index === 0 || prevToggle.type !== 'divider' || prevToggle.value !== toggle.value}
@@ -58,12 +81,12 @@ {/each} {/snippet} -{#if !noContainer && parsedKv.length > 4} +{#if !noContainer && groupedToggles.length > 4}
- {@render toggles(true)} + {@render toggles(groupedToggles, true)} {#if DBState.db.supaModelType !== 'none' || DBState.db.hanuraiEnable || DBState.db.hypaV3}
@@ -74,7 +97,7 @@
- {@render toggles()} + {@render toggles(groupedToggles)} {#if DBState.db.supaModelType !== 'none' || DBState.db.hanuraiEnable || DBState.db.hypaV3}
diff --git a/src/ts/util.ts b/src/ts/util.ts index 3b12e5c6..1c20da11 100644 --- a/src/ts/util.ts +++ b/src/ts/util.ts @@ -1009,12 +1009,26 @@ export function parseKeyValue(template:string){ } } -type sidebarToggle = +export type sidebarToggleGroup = { + key?:string, + value?:string, + type:'group', + children:sidebarToggle[] +} + +export type sidebarToggleGroupEnd = { + key?:string, + value?:string, + type:'groupEnd', +} + +export type sidebarToggle = + | sidebarToggleGroup + | sidebarToggleGroupEnd | { key?:string, value?:string, type:'divider', - options?:string[] } | { key:string, @@ -1025,7 +1039,7 @@ type sidebarToggle = | { key:string, value:string, - type:string|undefined, + type:'text'|undefined, options?:string[] } @@ -1041,11 +1055,18 @@ export function parseToggleSyntax(template:string){ for(const line of splited){ const [key, value, type, option] = line.split('=') - if((key && value) || type === 'divider'){ + if(type === 'group' || type === 'groupEnd' || type === 'divider'){ keyValue.push({ key, value, type, + children: [] + }) + } else if((key && value)){ + keyValue.push({ + key, + value, + type: type === 'select' || type === 'text' ? type : undefined, options: option?.split(',') ?? [] }) } From 932ce2646f36f841486e7d8f4f70fea827fd99b0 Mon Sep 17 00:00:00 2001 From: enzi221 Date: Tue, 20 May 2025 01:21:54 +0900 Subject: [PATCH 3/5] feat: Apply mobileGUI justify-end to other toggles --- src/lib/SideBars/Toggles.svelte | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/lib/SideBars/Toggles.svelte b/src/lib/SideBars/Toggles.svelte index 0cf2525e..fa650855 100644 --- a/src/lib/SideBars/Toggles.svelte +++ b/src/lib/SideBars/Toggles.svelte @@ -40,14 +40,18 @@ {#snippet toggles(items: sidebarToggle[], reverse: boolean = false)} {#each items as toggle, index} {#if toggle.type === 'group' && toggle.children.length > 0} -
- {toggle.value} +
+ + {toggle.value} +
{@render toggles((toggle as sidebarToggleGroup).children, reverse)}
{:else if toggle.type === 'select'} -
+
{toggle.value} {#each toggle.options as option, i} @@ -56,7 +60,7 @@
{:else if toggle.type === 'text'} -
+
{toggle.value}
@@ -64,7 +68,7 @@ {@const prevToggle = groupedToggles[index - 1]} {#if index === 0 || prevToggle.type !== 'divider' || prevToggle.value !== toggle.value} -
+
{#if toggle.value} {toggle.value} {/if} @@ -72,7 +76,7 @@
{/if} {:else} -
+
{ DBState.db.globalChatVariables[`toggle_${toggle.key}`] = DBState.db.globalChatVariables[`toggle_${toggle.key}`] === '1' ? '0' : '1' }} /> From 129389b9c005d3249607141cbd6e3a96680df554 Mon Sep 17 00:00:00 2001 From: enzi221 Date: Tue, 20 May 2025 01:28:00 +0900 Subject: [PATCH 4/5] fix: Smaller padding than anticipated --- src/lib/SideBars/Toggles.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/SideBars/Toggles.svelte b/src/lib/SideBars/Toggles.svelte index fa650855..33ac7abe 100644 --- a/src/lib/SideBars/Toggles.svelte +++ b/src/lib/SideBars/Toggles.svelte @@ -46,7 +46,7 @@ class:justify-end={$MobileGUI}> {toggle.value} -
+
{@render toggles((toggle as sidebarToggleGroup).children, reverse)}
From ade370e35da35f6f9c3e261f3037ac6fa68ca4a2 Mon Sep 17 00:00:00 2001 From: enzi221 Date: Sun, 25 May 2025 00:25:23 +0900 Subject: [PATCH 5/5] refactor: Use predefined collapsible component --- src/lib/SideBars/Toggles.svelte | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/lib/SideBars/Toggles.svelte b/src/lib/SideBars/Toggles.svelte index 33ac7abe..41402bda 100644 --- a/src/lib/SideBars/Toggles.svelte +++ b/src/lib/SideBars/Toggles.svelte @@ -4,6 +4,7 @@ import { parseToggleSyntax, type sidebarToggle, type sidebarToggleGroup } from "src/ts/util"; import { language } from "src/lang"; import type { character, groupChat } from "src/ts/storage/database.svelte"; + import Arcodion from '../UI/Arcodion.svelte' import CheckInput from "../UI/GUI/CheckInput.svelte"; import SelectInput from "../UI/GUI/SelectInput.svelte"; import OptionInput from "../UI/GUI/OptionInput.svelte"; @@ -40,16 +41,11 @@ {#snippet toggles(items: sidebarToggle[], reverse: boolean = false)} {#each items as toggle, index} {#if toggle.type === 'group' && toggle.children.length > 0} -
- - {toggle.value} - -
+
+ {@render toggles((toggle as sidebarToggleGroup).children, reverse)} -
-
+ +
{:else if toggle.type === 'select'}
{toggle.value}