From 3f68238c9a7a4609fa0c86545af4bf04b145c034 Mon Sep 17 00:00:00 2001 From: enzi221 Date: Tue, 20 May 2025 01:11:21 +0900 Subject: [PATCH] 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(',') ?? [] }) }